// // KycViewController.swift // GMERemittance // // Created by gme_2 on 12/09/2018. // Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved. // import UIKit import XLPagerTabStrip protocol KYCForm1Delegate: class { func `continue`(model: KycForm1Model) func show(model: KycModel) func addModel(model: KycForm1Model) } protocol KYCForm2Delegate: class { func addModel(model: KycForm2Model) func `continue`(model: KycForm2Model) } protocol KYCForm3Delegate: class { func isAllCompleted(isCompletedKYC3: Bool) -> Bool func submit(model: KycForm3Model) } class KYCRequestModel { var kycForm1: KycForm1Model? var kycForm2: KycForm2Model? var kycForm3: KycForm3Model? } class KycViewController: ButtonBarPagerTabStripViewController { enum KycViewControllers: Int { case form1 = 0 case form2 case fomr3 } struct Constants { static let stateRedColor = UIColor.init(hex: "#EC1C24") static let stateGreenColor = UIColor.init(hex: "8CC241") static let stateLabelGreyColor = UIColor.init(hex: "4a4a4a") static let xlbarButtonTextColor = UIColor.init(hex: "#ed1c24") static let xlOldSelectedCellColor = UIColor.init(hex: "#7b7a7a") static let xlTabBarFont = UIFont.sanfrancisco(.bold, size: 14) } // MARK: IBOutlets // MARK: Properties var form1: UIViewController = UIViewController() var form2: UIViewController = UIViewController() var form3: UIViewController = UIViewController() var errorOnForm1 = false var errorOnForm2 = false var errorOnForm3 = false var requestModel: KYCRequestModel? var kycModel: KycModel? { didSet { if let vc2 = self.form2 as? KycForm2ViewController { vc2.kycModel = self.kycModel } } } var presenter: KycModuleInterface? // MARK: VC's Life cycle override func viewDidLoad() { buttonBarView.selectedBar.backgroundColor = Constants.xlbarButtonTextColor settings.style.buttonBarBackgroundColor = .themeMainBackground settings.style.buttonBarItemBackgroundColor = .themeMainBackground settings.style.buttonBarItemFont = Constants.xlTabBarFont settings.style.selectedBarHeight = 2 settings.style.selectedBarBackgroundColor = Constants.xlbarButtonTextColor settings.style.buttonBarMinimumLineSpacing = 0 settings.style.buttonBarItemsShouldFillAvailiableWidth = true settings.style.buttonBarLeftContentInset = 0 settings.style.buttonBarRightContentInset = 0 changeCurrentIndexProgressive = {( oldCell: ButtonBarViewCell?, newCell: ButtonBarViewCell?, progressPercentage: CGFloat, changeCurrentIndex: Bool, animated: Bool ) -> Void in guard changeCurrentIndex == true else { return } oldCell?.label.textColor = Constants.xlOldSelectedCellColor newCell?.label.textColor = Constants.xlbarButtonTextColor } super.viewDidLoad() self.setup() } override func viewControllers( for pagerTabStripController: PagerTabStripViewController ) -> [UIViewController] { self.form1 = KycForm1Wireframe().getMainViewWithDelegate(delegate: self) self.form2 = KycForm2Wireframe().getMainViewWithDelegate(delegate: self) self.form3 = KycForm3Wireframe().getMainViewWithDelegate(delegate: self) return [form1, form2, form3] } // MARK: IBActions // MARK: Other Functions private func setup() { // all setup should be done here self.requestModel = KYCRequestModel() self.setupPicturedNavBar() self.navigationItem.setHidesBackButton(true, animated: true) } func initiateSubmitProcess() { // first validate. guard let requestModel = self.requestModel else {return} self.presenter?.submit(model: requestModel) // if error show them to respect page (if possible) // then submit to server. // then show result. } private func showErrorView() { if self.errorOnForm1 { self.moveToViewController(at: KycViewControllers.form1.rawValue) } else if self.errorOnForm2 { self.moveToViewController(at: KycViewControllers.form2.rawValue) } else if errorOnForm3 { self.moveToViewController(at: KycViewControllers.fomr3.rawValue) } } } // MARK: KycViewInterface extension KycViewController: KycViewInterface { func show(error: String) { self.alert(type: .error, message: error) } func showLoading() { self.showProgressHud() } func hideLoading() { self.hideProgressHud() } } extension KycViewController: KYCForm1Delegate { func addModel(model: KycForm1Model) { self.requestModel?.kycForm1 = model } func `continue`(model: KycForm1Model) { self.requestModel?.kycForm1 = model moveToViewController(at: KycViewControllers.form2.rawValue) } func view1DisappearWith(model: KycForm1Model) { self.requestModel?.kycForm1 = model } func show(model: KycModel) { self.kycModel = model } } extension KycViewController: KYCForm2Delegate { func addModel(model: KycForm2Model) { self.requestModel?.kycForm2 = model } func `continue`(model: KycForm2Model) { self.requestModel?.kycForm2 = model moveToViewController(at: KycViewControllers.fomr3.rawValue) } } extension KycViewController: KYCForm3Delegate { func isAllCompleted(isCompletedKYC3: Bool) -> Bool { return requestModel?.kycForm1?.isCompleted ?? false && requestModel?.kycForm2?.isCompleted ?? false && isCompletedKYC3 } func submit(model: KycForm3Model) { self.requestModel?.kycForm3 = model self.initiateSubmitProcess() } }