// // SendMoneyParentViewController.swift // GMERemittance // // Created by gme_2 on 28/08/2018. //Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved. // import UIKit protocol HUDStatusDelegate { func showLoading() func hideLoading() } protocol SendMoneyPaymentModeActionDelegate { func selected(bank: SendMoneyBank?) func selected(branch: SendMoneyBankBranch?) func selected(payoutMethod: SendMoneyPayoutMode?) func added(acountNumber: String) func continueToExchangeAction() } protocol SendMoneyExchangeRateActionDelegate { func continueToVerificationAction() func calculated(model: SendMoneyExchangeRateModel?) } class SendMoneyRequestModel { var paymemtMode: SendMoneyPayoutMode? var bank: SendMoneyBank? var branch: SendMoneyBankBranch? var accountNumber: String? var payingAmount: String? var exchangeRateDetail: SendMoneyExchangeRateModel? var transactionPassword: String? } class SendMoneyParentViewController: UIViewController { enum StateButtons: Int { case paymentMode = 1 case exchange = 2 case verification = 3 } struct Constants { static let stateRedColor = UIColor.init(hex: "#EC1C24") static let stateGreenColor = AppConstants.themeBlueColor static let stateLabelGreyColor = UIColor.init(hex: "4a4a4a") } // MARK: IBOutlets @IBOutlet weak var containerView: UIView! @IBOutlet weak var paymentModeButton: UIButton! @IBOutlet weak var exchangeRateButton: UIButton! @IBOutlet weak var verificationButton: UIButton! @IBOutlet weak var paymentModeLabel: UILabel! @IBOutlet weak var exchangeRateLabel: UILabel! @IBOutlet weak var verificationLabel: UILabel! // MARK: Properties var paymentModeViewController: UIViewController? var exchangeViewController: UIViewController? var verificationViewController: UIViewController? var requestModel: SendMoneyRequestModel? var presenter: SendMoneyParentModuleInterface? var stateButtons: [UIButton] = [] var state: StateButtons = .paymentMode { didSet { self.updateState(state: state) } } var receipient: Recipient? { didSet { print( self.receipient?.firstName) } } // MARK: VC's Life cycle override func viewDidLoad() { super.viewDidLoad() self.setup() self.presenter?.viewIsReady() self.setupViewControllers() self.addPaymentModeViewController() } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) setTitle(title: "Send Money") } override func viewWillDisappear(_ animated: Bool) { super.viewWillDisappear(animated) self.navigationItem.title = "" } // MARK: IBActions @IBAction func paymentMode(_ sender: UIButton) { self.addPaymentModeViewController() self.state = StateButtons.paymentMode } @IBAction func exchangeRate(_ sender: UIButton) { self.addExchangeViewController() self.state = StateButtons.exchange } @IBAction func verification(_ sender: UIButton) { self.addVerificationViewController() self.state = StateButtons.verification } // MARK: Other Functions private func setup() { // all setup should be done here self.setTitle(title: "Send Money") self.state = StateButtons.paymentMode self.configureViews() self.requestModel = SendMoneyRequestModel() } private func setupNavigationBar() { } private func setTitle(title: String) { self.navigationItem.title = title } private func setupViewControllers() { let paymentModelWireframe = SendMoneyPaymentModeWireframe() let pvc = paymentModelWireframe.getMainView() as! SendMoneyPaymentModeViewController pvc.recipient = self.receipient pvc.hudDelegate = self pvc.actionDelegate = self self.paymentModeViewController = pvc let exchangeViewWireframe = SendMoneyExchangeRateWireframe() let evc = exchangeViewWireframe.getMainView() as! SendMoneyExchangeRateViewController evc.reciepient = self.receipient evc.actionDelegate = self evc.hudDelegate = self self.exchangeViewController = evc let verificationWireframe = SendMoneyVerificationWireframe() let vvc = verificationWireframe.getMainView() as! SendMoneyVerificationViewController vvc.reciepient = self.receipient vvc.requestModel = self.requestModel vvc.hudDelegate = self self.verificationViewController = vvc } private func configureViews() { self.paymentModeButton.tag = 1 self.exchangeRateButton.tag = 2 self.verificationButton.tag = 3 self.stateButtons = [paymentModeButton,exchangeRateButton, verificationButton ] [paymentModeButton, exchangeRateButton, verificationButton].forEach({ $0?.rounded() }) } func updateState(state: StateButtons) { switch state { case .paymentMode: // buttons self.paymentModeButton.backgroundColor = Constants.stateGreenColor self.exchangeRateButton.backgroundColor = Constants.stateRedColor self.verificationButton.backgroundColor = Constants.stateRedColor self.exchangeRateButton.isUserInteractionEnabled = false self.verificationButton.isUserInteractionEnabled = false // labels self.paymentModeLabel.textColor = Constants.stateGreenColor self.exchangeRateLabel.textColor = Constants.stateLabelGreyColor self.verificationLabel.textColor = Constants.stateLabelGreyColor case .exchange: // buttons self.paymentModeButton.backgroundColor = Constants.stateGreenColor self.exchangeRateButton.backgroundColor = Constants.stateGreenColor self.verificationButton.backgroundColor = Constants.stateRedColor self.exchangeRateButton.isUserInteractionEnabled = true self.verificationButton.isUserInteractionEnabled = false // labels self.paymentModeLabel.textColor = Constants.stateLabelGreyColor self.exchangeRateLabel.textColor = Constants.stateGreenColor self.verificationLabel.textColor = Constants.stateLabelGreyColor case .verification: // button self.paymentModeButton.backgroundColor = Constants.stateGreenColor self.exchangeRateButton.backgroundColor = Constants.stateGreenColor self.verificationButton.backgroundColor = Constants.stateGreenColor self.exchangeRateButton.isUserInteractionEnabled = true // labels self.paymentModeLabel.textColor = Constants.stateLabelGreyColor self.exchangeRateLabel.textColor = Constants.stateLabelGreyColor self.verificationLabel.textColor = Constants.stateLabelGreyColor } } func addPaymentModeViewController() { guard let paymentModeViewController = self.paymentModeViewController else {return} self.addChildViewController(paymentModeViewController) UIView.transition(with: self.containerView, duration: 0.33, options: .transitionCrossDissolve, animations: { self.containerView.addSubview(paymentModeViewController.view) }, completion: nil) paymentModeViewController.view.frame = containerView.bounds paymentModeViewController.view.autoresizingMask = [.flexibleWidth, .flexibleHeight] paymentModeViewController.didMove(toParentViewController: self) } func addExchangeViewController() { guard let exchangeViewController = self.exchangeViewController as? SendMoneyExchangeRateViewController else {return} exchangeViewController.requestModel = self.requestModel exchangeViewController.actionDelegate = self self.addChildViewController(exchangeViewController) UIView.transition(with: self.containerView, duration: 0.33, options: .transitionCrossDissolve, animations: { self.containerView.addSubview(exchangeViewController.view) }, completion: nil) exchangeViewController.view.frame = containerView.bounds exchangeViewController.view.autoresizingMask = [.flexibleWidth, .flexibleHeight] exchangeViewController.didMove(toParentViewController: self) } func addVerificationViewController() { guard let verificationViewController = self.verificationViewController as? SendMoneyVerificationViewController else {return} verificationViewController.reciepient = self.receipient verificationViewController.requestModel = self.requestModel self.addChildViewController(verificationViewController) UIView.transition(with: self.containerView, duration: 0.33, options: .transitionCrossDissolve, animations: { self.containerView.addSubview(verificationViewController.view) }, completion: nil) verificationViewController.view.frame = containerView.bounds verificationViewController.view.autoresizingMask = [.flexibleWidth, .flexibleHeight] verificationViewController.didMove(toParentViewController: self) } } // MARK: SendMoneyParentViewInterface extension SendMoneyParentViewController: SendMoneyParentViewInterface { func show(model: Recipient) { self.receipient = model } } extension SendMoneyParentViewController: HUDStatusDelegate { func showLoading() { self.showProgressHud() } func hideLoading() { self.hideProgressHud() } } extension SendMoneyParentViewController: SendMoneyPaymentModeActionDelegate { func selected(bank: SendMoneyBank?) { self.requestModel?.bank = bank } func selected(branch: SendMoneyBankBranch?) { self.requestModel?.branch = branch } func selected(payoutMethod: SendMoneyPayoutMode?) { self.requestModel?.paymemtMode = payoutMethod } func continueToExchangeAction() { self.addExchangeViewController() self.state = StateButtons.exchange } func added(acountNumber: String) { self.requestModel?.accountNumber = acountNumber } } extension SendMoneyParentViewController: SendMoneyExchangeRateActionDelegate { func continueToVerificationAction() { self.addVerificationViewController() self.state = StateButtons.verification } func calculated(model: SendMoneyExchangeRateModel?) { self.requestModel?.exchangeRateDetail = model } }