// // AddAccountViewController.swift // GME Remit // // Created by InKwon Devik Kim on 12/04/2019. //Copyright © 2019 Gobal Money Express Co. Ltd. All rights reserved. // import UIKit import RxSwift import RxCocoa class AddAccountViewController: UIViewController { // MARK: Properties var presenter: AddAccountModuleInterface? private var selectedLanguage: KftcLanguage? private var selectedBank: BankInformation? private let disposeBag = DisposeBag() private lazy var languagePickerView = UIPickerView() private lazy var bankPickerView = UIPickerView() private var validDic = [ "bank": false, "account": false, "language": false ] private var isValid = false { didSet { verifyAccountButton.isEnabled = isValid verifyAccountButton.backgroundColor = isValid ? .themeRed : .lightGray } } private var banks: [String]? = ["--- Select Bank ---"] private var languages: [String]? = ["--- Select Language ---"] private var model: (bankList: [BankInformation]?, kftcModel: KFTCModel?) { didSet { let bankConfigure = TablePresenterConfiguration(presenterTitle: "Select Bank") bankNameTextField.useAsDropDown(with: bankConfigure, items: model.bankList) let languageConfigure = TablePresenterConfiguration(presenterTitle: "Select Bank") languageTextField.useAsDropDown(with: languageConfigure, items: model.kftcModel?.languages) } } // MARK: IBOutlets @IBOutlet private weak var bankNameTextField: ValidationTextField! @IBOutlet private weak var accountTextField: ValidationTextField! @IBOutlet private weak var languageTextField: ValidationTextField! @IBOutlet private weak var verifyAccountButton: UIButton! @IBOutlet weak var closeButton: UIBarButtonItem! @IBOutlet weak var titleInfoLabel: UILabel! // MARK: VC's Life cycle override func viewDidLoad() { super.viewDidLoad() setup() bankNameTextField.selectedItem.map {$0 as? BankInformation}.asDriverOnErrorJustComplete() .drive(onNext: {[weak self] in self?.selectedBank = $0 self?.bankNameTextField.setBank(with: $0?.bankCode) }).disposed(by: disposeBag) languageTextField.selectedItem.map {$0 as? KftcLanguage}.asDriverOnErrorJustComplete() .drive(onNext: {[weak self] in self?.selectedLanguage = $0 }).disposed(by: disposeBag) } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) title = "add_auto_debit_account_text".localized() setupNormalNavigation() } override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) } override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) title = "" view.endEditing(true) } // MARK: IBActions @IBAction private func verifyAccountButtonTouch(_ sender: UIButton) { presenter?.verifyAccount( customerID: GMEDB.shared.user.string(.senderId) ?? "", // senderID bankCode: selectedBank?.bankCode ?? "", accountNumber: accountTextField.text ?? "") } @IBAction private func closeButtonTouch(_ sender: UIBarButtonItem) { dismiss(animated: true, completion: nil) } // MARK: Other Functions private func setup() { // all setup should be done here presenter?.viewIsReady() verifyAccountButton.layer.cornerRadius = 5 setValidTextField() setMultilanguage() } private func setValidTextField() { bankNameTextField.addTarget(self, action: #selector(textFieldDidChange(_:)), for: .editingChanged) languageTextField.addTarget(self, action: #selector(textFieldDidChange(_:)), for: .editingChanged) accountTextField.addTarget(self, action: #selector(self.textFieldDidChange(_:)), for: .editingChanged) accountTextField.validCondition = {$0.count > 9} languageTextField.validCondition = {$0.count > 1} bankNameTextField.validCondition = {$0.count > 1} } @objc func textFieldDidChange(_ textfield: UITextField) { guard let tf = textfield as? ValidationTextField else { return } switch tf { case bankNameTextField: validDic["bank"] = tf.isValid case accountTextField: validDic["account"] = tf.isValid case languageTextField: validDic["language"] = tf.isValid default: break } isValid = validDic.allSatisfy {$0.value} } private func setMultilanguage() { closeButton.title = "penny_test_close_text".localized() titleInfoLabel.text = "to_add_account_enter_information".localized() bankNameTextField.placeholder = "select_your_bank".localized() accountTextField.placeholder = "enter_bank_ac_no".localized() languageTextField.placeholder = "select_language".localized() verifyAccountButton.setTitle("verify_account_button_text".localized(), for: .normal) } } // MARK: AddAccountViewInterface extension AddAccountViewController: AddAccountViewInterface { func setModel(model: (bankList: [BankInformation]?, kftcModel: KFTCModel?)) { self.model = model } func failureSetModel(error: Error) { alert(type: .error, message: error.localizedDescription) {[weak self] in guard let `self` = self else {return} self.dismiss(animated: true, completion: nil) } } func successVerify() { let url = "\(model.kftcModel?.url ?? "")&lang=\(selectedLanguage?.key ?? "")" var header = [String: String]() model.kftcModel?.header?.forEach({ header[$0.key ?? ""] = $0.value ?? "" }) header["Kftc-Bfop-BankCodeStd"] = selectedBank?.bankCode ?? "" header["Kftc-Bfop-AccountNum"] = accountTextField.text ?? "" presenter?.doGetTestURL(url: url, header: header) } func successTestURL(url: String) { presenter?.goKFTC(url: url, header: self.model.kftcModel?.header) } func failure(error: Error) { if error.localizedDescription.contains("JSON") { let url = "\(model.kftcModel?.url ?? "")&lang=\(selectedLanguage?.key ?? "")" let bankCode = KftcHeader(key: "Kftc-Bfop-BankCodeStd", value: selectedBank?.bankCode ?? "") let accountNumber = KftcHeader(key: "Kftc-Bfop-AccountNum", value: accountTextField.text ?? "") model.kftcModel?.header?.append(bankCode) model.kftcModel?.header?.append(accountNumber) presenter?.goKFTC(url: url, header: self.model.kftcModel?.header) } else { alert(type: .error, message: error.localizedDescription, okAction: nil) } } func startLoading() { showProgressHud() } func endLoading() { hideProgressHud() } }