// // LoginPresenter.swift // Sirani // // Created by Anhar Solehudin on 07/04/19. // Copyright © 2019 Anhar Solehudin. All rights reserved. // import Foundation import SwiftyJSON import Firebase class LoginPresenter { private let STATUS_SUCCESS = "ok" private let FAILED_LOGIN_MESSAGE = "Login Gagal, Silahkan Ulangi Kembali" private let siraniApiServices: SiraniApiServices weak private var view: LoginViewDelegate? init(siraniApiServices: SiraniApiServices) { self.siraniApiServices = siraniApiServices } func attachView(view: LoginViewDelegate?) { self.view = view } func detachView() { self.view = nil } func login(username: String, password: String) { self.view?.showLoading() siraniApiServices.postAuthLogin(username: username, password: password).responseJSON { response in if response.error == nil { guard let data = response.data else { return } if let json = try? JSON(data: data) { let status = json["status_login"].stringValue if status == self.STATUS_SUCCESS { let user = User( username: json["username"].stringValue, userid: json["user_id"].intValue, roleid: json["role_id"].stringValue, rolename: json["role_name"].stringValue, custid: json["cust_id"].intValue, fullname: json["fullname"].stringValue, roles: json["roles"].stringValue ) self.loginSucces(user: user) } else { let message = json["message"].stringValue self.loginFailed(message: message) } } else { self.loginFailed(message: self.FAILED_LOGIN_MESSAGE) } } else { self.loginFailed(message: self.FAILED_LOGIN_MESSAGE) } } } // other functions private func loginSucces(user: User) { let userSaved = UserState.instance.userDataSaved(user: user) if userSaved { Messaging.messaging().token { token, error in if let error = error { print("LOGIN : Error fetching FCM registration token: \(error)") } else if let token = token { print("LOGIN : FCM registration token: \(token)") self.postFcmToken(fcmToken: token) } } DispatchQueue.main.asyncAfter(deadline: .now() + 0.6) { self.view?.hideLoading() self.view?.onSuccessLogin(user: user) } } else { self.loginFailed(message: self.FAILED_LOGIN_MESSAGE) } } private func postFcmToken(fcmToken: String) { let isLogin = UserState.instance.isLoggedIn() if isLogin { let userId = UserState.instance.getUserId() let roleId = UserState.instance.getRoleId() print("POST FCM TOKEN AFTER LOGIN") siraniApiServices.postFcmToken(user_id: userId, role_id: roleId, fcmToken: fcmToken).responseJSON { response in if response.error == nil { print("LOGIN : FCM User Token Updated To Server : \(fcmToken)") } } } } private func loginFailed(message: String) { DispatchQueue.main.asyncAfter(deadline: .now() + 1.0) { self.view?.onFailedLogin(message: message) self.view?.hideLoading() } } }