// // ExchangeViewModel.swift // GMERemittance // // Created by FMI-12 on 2/4/18. // Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved. // import Foundation class ExchangeRateViewModel: ModelExtension { var exchangeRateAvailable: Box = Box(nil) var currencyInfoAvailable: Box = Box(nil) var exchangeRateConnectionTimeOut: Box = Box(nil) var currenciesData = [CurrenciesData]() var exchangeRateData: ExchangeRateData? private var exchangeRate: Float = 0.0 private var transferLimit: Double = 0.0 let userId = UserDefaults.standard.object(forKey: "com.gmeremit.username") as? String /** To get currency - parameter currencyInfo: currency info */ func fetchCurrencies(currencyInfo: [String: String]){ if !Reachability.isConnectedToNetwork() { self.internetConnection.value = false } else { self.currenciesData.removeAll() RestApiMananger.sharedInstance.getCurrencies(param: currencyInfo) { result in switch result { case let .success(currencyJSON): if currencyJSON.count > 0 { for i in 0 ... (currencyJSON.count-1) { do { let currencyDetail = try JSONDecoder().decode(CurrenciesData.self, from: currencyJSON[i].rawData()) self.currenciesData.append(currencyDetail) } catch let err { self.setErrorMessage(message: err as! String) self.currencyInfoAvailable.value = false } } } self.currencyInfoAvailable.value = true case let .failure(errorJSON): self.setErrorMessage(message: errorJSON["message"].stringValue) self.currencyInfoAvailable.value = false case .updateAccessCode: RestApiMananger.sharedInstance.updateAccessCode(userId: self.userId!, password: self.getLoginPassword()) { result in if result != "Error"{ let uuid = RestApiMananger.sharedInstance.getUUID() UserDefaults.standard.set((result + ":" + uuid).toBase64(), forKey: "com.gmeremit.accessCode") self.fetchCurrencies(currencyInfo: currencyInfo) } } case .logOutUser(): RestApiMananger.sharedInstance.cancelExistingNetworkCalls() self.anotherLogin.value = true case .timeOut: self.exchangeRateConnectionTimeOut.value = false } } } } /** To get exchange rate - parameter exchangeData: exchange data in dictionary[:] datatype */ func fetchExchangeRate(exchangeData: [String: Any]) { if !Reachability.isConnectedToNetwork() { self.internetConnection.value = false } else { var exchangeRate = ExchangeRateData() RestApiMananger.sharedInstance.getExchangeRates(param: exchangeData) { result in switch result { case let .success(exchangeRateJSON): do { exchangeRate = try JSONDecoder().decode(ExchangeRateData.self, from: exchangeRateJSON.rawData()) self.exchangeRateData = exchangeRate } catch { self.exchangeRateAvailable.value = false } self.exchangeRateAvailable.value = true case let .failure(errorJSON): self.setErrorMessage(message: errorJSON["message"].stringValue) self.exchangeRateAvailable.value = false case .updateAccessCode: RestApiMananger.sharedInstance.updateAccessCode(userId: self.userId!, password: self.getLoginPassword()) { result in if result != "Error"{ let uuid = RestApiMananger.sharedInstance.getUUID() UserDefaults.standard.set((result + ":" + uuid).toBase64(), forKey: "com.gmeremit.accessCode") self.fetchExchangeRate(exchangeData: exchangeData) } } case .logOutUser(): RestApiMananger.sharedInstance.cancelExistingNetworkCalls() self.anotherLogin.value = true case .timeOut: self.exchangeRateConnectionTimeOut.value = false } } } } /** To get exchange rate - returns: ExchangeRateData */ func getExchangeRateData() -> ExchangeRateData{ if self.exchangeRateData != nil{ return self.exchangeRateData! } return ExchangeRateData() } /** To get currencies - returns: currencies data list */ func getCurrencies() -> [CurrenciesData]{ return self.currenciesData } /** To get currencies exchange rate in terms of KRW - parameter krw: krw amount - returns: exchange rate */ func getKRWtoOtherCurrency(krw: Float) -> Float { return krw * exchangeRate } }