// // AppConstants.swift // GMERemittance // // Created by gme_2 on 10/09/2018. // Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved. // import Foundation class AppConstants { static let uuid = "uuid" static let dateFormat = "yyyy-MM-dd" static let humanReadableDateFormat = "MMM d, yyyy" static let errorBorderWidth: CGFloat = 0.1 static let themeRedColor = UIColor.init(hex: "#ed1b24") static let themeDarkRedColor = UIColor.init(hex: "#be0007") static let themeBlueColor = UIColor.init(hex: "#303e9f") // 2D368F static let themWhiteColor = UIColor.init(hex: "#ffffff") static let emergencyLogoutErrorCode = -1111 static let maxKoreanMobileNoLength = 11 static let MainWireFrameNotificationName = "MainViewControllerSelect" static let pennyTestServerMessage = "pennyTestServerMessage" static let pennyTestStatusCode = "pennyTestStatusCode" static let pennyTestRequested = "pennyTestRequested" static let pennyTestPresentedOnce = "pennyTestPresentedOnce" static let criticalUpdate = "criticalUpdate" static let primaryBankWArningMessage = "Please verify your primary bank account to complete the registration." static let yearlyLimitNotification = "Yearly LImit" static let firstTimeLanguageIsSet = "firstTimeLanguageIsSet" } enum Devices { case iphone5 case iphone678 case iphone678Plus case iphoneX case ipad case other } //pennyTestStatus='0'-----0 not started, 1 requested , 2 completed enum PennyTestStatusCode: String { case notStarted = "0" case requested = "1" case completed = "2" case cancelled = "3" } class Utility { static func getDeviceModel() -> Devices { if UIDevice().userInterfaceIdiom == .phone { switch UIScreen.main.nativeBounds.height { case 1136: return .iphone5 case 1334: return .iphone678 case 2208: return .iphone678Plus case 2436: return .iphoneX default: return .other } }else { return .ipad } } static func isVerifiedUser() -> Bool { let val = (UserDefaults.standard.object(forKey: UserKeys.verified) as? Bool ) ?? false return val } static func didSubmitKyc() -> Bool { let val = (UserDefaults.standard.object(forKey: UserKeys.kyc) as? Bool ) ?? false return val } static func isCriticalUpdate() -> Bool { let val = (UserDefaults.standard.object(forKey: AppConstants.criticalUpdate) as? String )?.lowercased() == "Y".lowercased() return val } static func didPennyTestRequested() -> Bool { let val = (UserDefaults.standard.object(forKey: AppConstants.pennyTestStatusCode) as? String ) ?? "0" == PennyTestStatusCode.requested.rawValue // 0 is false and "1" = true 2 = cancelled return val } static func pennyTestPresentedOnce() -> Bool { let val = UserDefaults.standard.bool(forKey: AppConstants.pennyTestPresentedOnce) return val } static func didPennyTestCancelled() -> Bool { let val = (UserDefaults.standard.object(forKey: AppConstants.pennyTestStatusCode) as? String ) ?? "0" == PennyTestStatusCode.cancelled.rawValue return val } static func didPennyTestNotInitiated() -> Bool { let val = (UserDefaults.standard.object(forKey: AppConstants.pennyTestStatusCode) as? String ) ?? PennyTestStatusCode.notStarted.rawValue == PennyTestStatusCode.notStarted.rawValue return val } static func pennyTestVerified() -> Bool { let val = (UserDefaults.standard.object(forKey: AppConstants.pennyTestStatusCode) as? String ) ?? PennyTestStatusCode.notStarted.rawValue == PennyTestStatusCode.completed.rawValue return val } static func shouldShowPennyTestError() -> Bool { let val = (UserDefaults.standard.object(forKey: AppConstants.pennyTestStatusCode) as? String ) ?? PennyTestStatusCode.notStarted.rawValue != PennyTestStatusCode.completed.rawValue return val } static func shouldShowPennyTestScreen() -> Bool { let completed = (UserDefaults.standard.object(forKey: AppConstants.pennyTestStatusCode) as? String ) ?? PennyTestStatusCode.notStarted.rawValue == PennyTestStatusCode.completed.rawValue let cancelled = Utility.didPennyTestCancelled() let requested = Utility.didPennyTestRequested() return !cancelled && !completed && !requested } static func getMyUserName() -> String { let defaults = UserDefaults.standard let myUsername = defaults.string(forKey: UserKeys.userId) ?? "" return myUsername } static func getMyId() -> String { let defaults = UserDefaults.standard let myId = defaults.string(forKey: UserKeys.senderId) ?? "" return myId } static func getMyKftcClientId() -> String { let defaults = UserDefaults.standard let myId = defaults.string(forKey: UserKeys.kftcClientId) ?? "" return myId } static func getMyIdNumber() -> String { let defaults = UserDefaults.standard let myId = defaults.string(forKey: UserKeys.idNumber) ?? "" return myId } static func getMyPrimaryAccountNumber() -> String { let defaults = UserDefaults.standard let val = defaults.string(forKey: UserKeys.primaryAccountNumber) ?? "" print(val) return val } static func isValidEmail(email: String) -> Bool { let emailRegex = "[A-Z0-9a-z._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}" let emailTest = NSPredicate(format:"SELF MATCHES %@", emailRegex) return emailTest.evaluate(with: email) } static func getCommaSeperatedString(numberString: String) -> String? { let text = numberString.filter({ $0 != "," }) if let number = Double(text) { let nsNumber = NSNumber.init(value: number) let currencyFormatter = NumberFormatter() currencyFormatter.numberStyle = .decimal let commaSeperatedNumberString = currencyFormatter.string(for: nsNumber) let text = commaSeperatedNumberString?.replacingOccurrences(of: ".", with: ",") return text } return nil } static func getCommaSeperatedStringWithDecimal(numberString: String) -> String? { let text = numberString.filter({ $0 != "," }) if let number = Double(text) { let nsNumber = NSNumber.init(value: number) let currencyFormatter = NumberFormatter() currencyFormatter.numberStyle = .decimal currencyFormatter.groupingSize = 3 currencyFormatter.usesGroupingSeparator = true let commaSeperatedNumberString = currencyFormatter.string(for: nsNumber) return commaSeperatedNumberString } return nil } static func save(user: User?, accessCodeBase64: String? = nil, password: String? = nil, login: Bool? = false) { func save(value: Any?, forKey: String) { let defaults = UserDefaults.standard defaults.set(value, forKey: forKey) } save(value: user?.dpUrl ?? "", forKey: UserKeys.dpUrl) save(value: user?.walletNumber ?? "", forKey: UserKeys.walletNumber) save(value: user?.primaryBankName ?? "", forKey: UserKeys.primaryBankName) let firstName = user?.firstName ?? "" let middleName = user?.lastName ?? "" let lastName = user?.lastName ?? "" let fullName = firstName + " " + middleName + " " + lastName save(value: fullName, forKey: UserKeys.fullName) save(value: firstName, forKey: UserKeys.firstName) save(value: lastName, forKey: UserKeys.lastName) if login ?? false { save(value: accessCodeBase64, forKey: UserKeys.accessCode) save(value: user?.kftcClientId ?? "", forKey: UserKeys.kftcClientId) } save(value: user?.userId ?? "", forKey: UserKeys.userId) save(value: user?.nickName ?? "", forKey: UserKeys.nickName) save(value: user?.availableBalance ?? "", forKey: user?.availableBalance ?? "0" ) save(value: user?.rewardPoint ?? "", forKey: UserKeys.rewardPoint) save(value: user?.verified ?? false, forKey: UserKeys.verified) save(value: user?.kyc ?? "", forKey: UserKeys.kyc) save(value: user?.email ?? "", forKey: UserKeys.email) save(value: user?.mobileNumber ?? "", forKey: UserKeys.mobileNumber) save(value: user?.sourceId ?? "", forKey: UserKeys.sourceId) save(value: password, forKey: "com.gmeremit.password") save(value: user?.isReferred ?? "", forKey: UserKeys.isReferred) save(value: user?.idType ?? "", forKey: UserKeys.idType) save(value: user?.idNumber ?? "", forKey: UserKeys.idNumber) save(value: user?.country ?? "" , forKey: UserKeys.country) save(value: user?.countryCode, forKey: UserKeys.countryCode) save(value: user?.primaryAccountNumber, forKey: UserKeys.primaryAccountNumber) save(value: user?.senderId, forKey: UserKeys.senderId) save(value: user?.yearlyLimit, forKey: UserKeys.yearlyLimit) save(value: user?.dateOfBirth, forKey: UserKeys.dateOfBirth) save(value: user?.pennyTestStatus, forKey: AppConstants.pennyTestStatusCode) } static func numberWithoutprecedingZero(str: String) -> String { let formatter = NumberFormatter() let number = formatter.number(from: str) return "\(number ?? 0)" ?? "" } static func getAppVersion () -> String? { let version = Bundle.main.infoDictionary?["CFBundleShortVersionString"] as? String print(version) return version } static func getOsVersion() -> String { let version = UIDevice.current.systemVersion return version } static func getPhoneBrand() -> String { let phoneName = UIDevice.current.model return phoneName } static func getPhoneOs() -> String { let os = UIDevice.current.systemName return os } static func getUUid() -> String? { let uuid = UIDevice.current.identifierForVendor?.uuidString return uuid } static func getCliendId() -> String { return "172017F9EC11222E8107142733" } } extension Utility { static func getLanguages() -> [SendMoneyCountryViewModel] { let english = SendMoneyCountryViewModel() english.name = "english_language_text".localized() english.id = "english_language_text" english.title = "English" english.code = "en" let korean = SendMoneyCountryViewModel() korean.name = "korean_language_text".localized() korean.id = "korean_language_text" korean.title = "한국" korean.code = "kr" let cambodia = SendMoneyCountryViewModel() cambodia.name = "cambodia_lanugage_text".localized() cambodia.id = "cambodia_lanugage_text" cambodia.title = "ភាសាខ្មែរ" cambodia.code = "kh" let srilanka = SendMoneyCountryViewModel() srilanka.name = "srilanka_lanugage_text".localized() srilanka.id = "srilanka_lanugage_text" srilanka.title = "සිංහල" srilanka.code = "lk" let myanmar = SendMoneyCountryViewModel() myanmar.name = "myanmar_language_text".localized() myanmar.id = "myanmar_language_text" myanmar.title = "Myanmar" myanmar.code = "mm" let russian = SendMoneyCountryViewModel() russian.name = "russian_langugae_text".localized() russian.id = "russian_langugae_text" russian.code = "ru" let vietnam = SendMoneyCountryViewModel() vietnam.name = "vietnam_language_text".localized() vietnam.id = "vietnam_language_text" vietnam.code = "vn" let thailand = SendMoneyCountryViewModel() thailand.name = "thailand_language_text".localized() thailand.id = "thailand_language_text" thailand.title = "ไทย" thailand.code = "th" let indonesia = SendMoneyCountryViewModel() indonesia.name = "indonesia_language_text".localized() indonesia.id = "indonesia_language_text" indonesia.title = "Indonesia" indonesia.code = "id" let mongolia = SendMoneyCountryViewModel() mongolia.name = "mongolia_language_text".localized() mongolia.id = "mongolia_language_text" mongolia.title = "Монгол" mongolia.code = "mn" let nepal = SendMoneyCountryViewModel() nepal.name = "nepali_language_text".localized() nepal.id = "nepali_language_text" nepal.title = "नेपाली" nepal.code = "np" let bangladesh = SendMoneyCountryViewModel() bangladesh.name = "bangladesh_language_text".localized() bangladesh.id = "bangladesh_language_text" bangladesh.title = "bangladesh" bangladesh.code = "bd" let languages = [english, korean, cambodia, srilanka, thailand, indonesia, mongolia, myanmar, nepal, bangladesh] // let languages = [english, korean, cambodia, srilanka, myanmar, russian, vietnam, thailand, indonesia, mongolia] return languages } }