// // KycForm3ViewController.swift // GMERemittance // // Created by gme_2 on 12/09/2018. //Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved. // import UIKit import XLPagerTabStrip import PMAlertController enum PictureType: Int { case selfie case front case back case passbook case passport } struct KycForm3FieldKeys { static let selfieImage = "bank" static let frontImage = "accountNumber" static let backImage = "verificationId" static let passbookImage = "verificationIdNumber" static let passportImage = "expiryDate" } class KycForm3Model { var selfieImage: UIImage? var frontImage: UIImage? var backImage: UIImage? var passbookImage: UIImage? var passportImage: UIImage? } class KycForm3ViewController: UIViewController { struct Constants { static let stateRedColor = UIColor.init(hex: "#EC1C24") static let clearColor = UIColor.clear static let errorBorderSize = AppConstants.errorBorderWidth } // MARK: IBOutlets @IBOutlet weak var selfieButton: UIButton! @IBOutlet weak var frontButton: UIButton! @IBOutlet weak var backButton: UIButton! @IBOutlet weak var passbook: UIButton! @IBOutlet weak var passport: UIButton! // views @IBOutlet weak var selfieView: UIView! @IBOutlet weak var frontImageView: UIView! @IBOutlet weak var backImageView: UIView! @IBOutlet weak var passBookView: UIView! @IBOutlet weak var passportView: UIView! // MARK: Properties let kycForm3Model = KycForm3Model() var presenter: KycForm3ModuleInterface? var delegate: KYCForm3Delegate? var multiMediaManager: MultiMediaManager? var imageCropper: ImageCroper? var currentPictureType: PictureType? var selectedSelfieImage = false var selectedFrontImage = false var selectedBackImage = false var selectedPassbookImage = false var selectedPassPortImage = false var errorViewsDict: [String: UIView] = [:] // MARK: VC's Life cycle override func viewDidLoad() { super.viewDidLoad() self.setup() } // MARK: IBActions // sample actions @IBAction func selfie(_ sender: UIButton) { showSample(type: .selfie, titleString: "Picture with National/Alien Reg ID Front") } @IBAction func front(_ sender: UIButton) { showSample(type: .front, titleString: "National/ Alien Reg ID Front") } @IBAction func back(_ sender: UIButton) { showSample(type: .back, titleString: "National/ Alien Reg ID Back") } @IBAction func passbook(_ sender: UIButton) { showSample(type: .passbook, titleString: "Passbook") } @IBAction func passport(_ sender: UIButton) { showSample(type: .passport, titleString: "Passport") } // camera actions @IBAction func selfieCamera(_ sender: UIButton) { self.currentPictureType = .selfie self.showPicker() } @IBAction func frontCamera(_ sender: UIButton) { self.currentPictureType = .front print("front") self.showPicker() } @IBAction func backCamera(_ sender: UIButton) { self.currentPictureType = .back print("back") self.showPicker() } @IBAction func passbookCamera(_ sender: UIButton) { self.currentPictureType = .passbook print("passbook") self.showPicker() } @IBAction func passportCamera(_ sender: UIButton) { self.currentPictureType = .passport print("passport") self.showPicker() } // submit action @IBAction func submit(_ sender: UIButton) { self.delegate?.submit(model: self.kycForm3Model) } // MARK: Other Functions private func setup() { // all setup should be done here self.multiMediaManager = MultiMediaManager(presenter: self) multiMediaManager?.delegate = self self.imageCropper = ImageCroper(presentingViewController: self) imageCropper?.delegate = self setupErrorViews() } private func setupErrorViews() { self.errorViewsDict = [ KycForm3FieldKeys.selfieImage: self.selfieView, KycForm3FieldKeys.frontImage: self.frontImageView, KycForm3FieldKeys.backImage: self.backImageView, KycForm3FieldKeys.passbookImage: self.passBookView, KycForm3FieldKeys.passportImage: self.passportView, ] } private func showPicker() { multiMediaManager?.openPicker(mode: UIImagePickerControllerCameraCaptureMode.photo) } func showSample(type: PictureType, titleString: String) { let image: UIImage? switch type { case .selfie: image = #imageLiteral(resourceName: "sampleSelfie") case .front: image = #imageLiteral(resourceName: "sampleFront") case .back: image = #imageLiteral(resourceName: "sampleBack") case .passbook: image = #imageLiteral(resourceName: "sampleBack") case .passport: image = #imageLiteral(resourceName: "sampleBack") } // show alert let alertVC = PMAlertController(title: "", description: "", image: image, style: .alert) alertVC.alertView.layer.cornerRadius = 10 let action = PMAlertAction(title: "OK", style: .cancel) alertVC.addAction(action) self.present(alertVC, animated: true, completion: nil) } } // MARK: KycForm3ViewInterface extension KycForm3ViewController: KycForm3ViewInterface { } extension KycForm3ViewController: IndicatorInfoProvider { func indicatorInfo(for pagerTabStripController: PagerTabStripViewController) -> IndicatorInfo { return IndicatorInfo.init(title: "Upload") } } extension KycForm3ViewController: MultimediaPresenterProtocol { func presenting() -> UIViewController { return self } } extension KycForm3ViewController: MultiMediaManagerDelegate { func didFinishPickingWithImage(image: UIImage) { self.imageCropper?.cropImage(image: image) } func didFinishPickingWithError(error: String) { self.alert(message: error) } func hideBorder(view: UIView) { view.layer.borderWidth = 0 view.layer.addShadow(with: Constants.clearColor) } } extension KycForm3ViewController: ImageCropperDelegate { func didCropWith(image: UIImage) { guard let type = self.currentPictureType else {return; print("returning")} switch type { case .selfie: self.selfieButton.setImage(image, for: .normal) self.selectedSelfieImage = true self.kycForm3Model.selfieImage = image hideBorder(view: selfieView) case .front: self.frontButton.setImage(image, for: .normal) self.selectedFrontImage = true self.kycForm3Model.frontImage = image hideBorder(view: frontImageView) case .back: self.backButton.setImage(image, for: .normal) self.selectedBackImage = true self.kycForm3Model.backImage = image hideBorder(view: backImageView) case .passbook: self.passbook.setImage(image, for: .normal) self.selectedPassbookImage = true self.kycForm3Model.passbookImage = image hideBorder(view: passBookView) case .passport: self.passport.setImage(image, for: .normal) self.selectedPassPortImage = true self.kycForm3Model.passportImage = image hideBorder(view: passportView) } } func didFailedCropWith(error: Error) { self.alert(message: error.localizedDescription) } } extension KycForm3ViewController { private func showBorder(view : UIView?) { guard let _view = view else {return} _view.layer.borderColor = Constants.stateRedColor.cgColor _view.layer.borderWidth = Constants.errorBorderSize _view.layer.addShadow(with: Constants.stateRedColor) } func show(result: (doesNotSucks: Bool, errorsDick: [String : String])) { var position = 11 if result.doesNotSucks { // if isValid }else { result.errorsDick.forEach({ // self.show(error: $0.value, label: label) let view = errorViewsDict[$0.key] self.showBorder(view: view) let tag = (view?.tag ?? position) position = tag < position ? tag : position // if let topMostView = self.views.filter({ // $0.tag == tag // }).first { // // Todo // // scroll to view here // } }) } } }