// // WalletViewController.swift // GMERemittance // // Created by Sujal on 2/3/18. // Copyright © 2018 Gobal Money Express Co. Ltd. All rights reserved. // import UIKit class WalletViewController: UIViewController, UIScrollViewDelegate { @IBOutlet weak var segmentedControl: UISegmentedControl! @IBOutlet weak var stackView: UIStackView! @IBOutlet weak var scrollView: UIScrollView! @IBOutlet weak var contentView: UIView! @IBOutlet weak var labelID: UILabel! @IBOutlet weak var textFieldID: UITextField! @IBOutlet weak var textFieldAmount: UITextField! @IBOutlet weak var textFieldMessage: UITextField! @IBOutlet weak var buttonSubmit: UIButton! @IBOutlet weak var buttonMoneyRequestCount: UIButton! private var activeTextField: UITextField? private var walletviewmodel = WalletViewModel() // private var profileviewmodel = ProfileViewModel() private var tracktransactionviewmodel = TrackTransactionViewModel() public var transaction: Transaction? private var activityIndicator: UIActivityIndicatorView = UIActivityIndicatorView() private var moneyRequestAccepted: Bool = false public static var notificationCode: String = "" private var isScrolled: Bool = false public static var walletConnectionTimeOutCheck = 0 @objc func appMovedToForeground() { activeTextField?.resignFirstResponder() if isScrolled { isScrolled = !isScrolled } } override func viewDidAppear(_ animated: Bool) { setUpAnotherLoginListener(genericviewmodel: walletviewmodel) setUpAnotherLoginListener(genericviewmodel: tracktransactionviewmodel) // setUpAnotherLoginListener(genericviewmodel: profileviewmodel) // profileviewmodel.profileConnectionTimeOut.value = nil /** connection timeout */ // profileviewmodel.profileConnectionTimeOut.bind { [unowned self] in // guard $0 != nil else { // return // } // self.stopLoading() // if WalletViewController.walletConnectionTimeOutCheck == 0{ // WalletViewController.walletConnectionTimeOutCheck = WalletViewController.walletConnectionTimeOutCheck+1 // self.popUpMessage(value: 31) // } // } // // tracktransactionviewmodel.transactionListConnectionTimeOut.value = nil /** connection timeout */ // tracktransactionviewmodel.transactionListConnectionTimeOut.bind { [unowned self] in // guard $0 != nil else { // return // } // self.stopLoading() // if WalletViewController.walletConnectionTimeOutCheck == 0{ // WalletViewController.walletConnectionTimeOutCheck = WalletViewController.walletConnectionTimeOutCheck+1 // self.popUpMessage(value: 31) // } // } // walletviewmodel.walletConnectionTimeOut.value = nil // /** // connection timeout // */ // walletviewmodel.walletConnectionTimeOut.bind { [unowned self] in // guard $0 != nil else { // return // } // self.stopLoading() // if WalletViewController.walletConnectionTimeOutCheck == 0{ // WalletViewController.walletConnectionTimeOutCheck = WalletViewController.walletConnectionTimeOutCheck+1 // self.popUpMessage(value: 31) // } // } // setUpNetworkListener() // setUpNetworkListenerForProfile() // setUpProfileListener() // setUpTransactionListener() // setUpWalletDetailsListener() // // /*so that the value is reset and no error message is seen when going back and froth in error case*/ // self.walletviewmodel.walletActionPerformed.value = nil // // self.buttonMoneyRequestCount.setTitle("", for: .normal) // self.buttonMoneyRequestCount.isUserInteractionEnabled = false // // tracktransactionviewmodel.fetchTransactionListForTrackAndWallet(recipientId: "", recipientName: "", transactionType: "moneyRequest", startDate: nil, endDate: nil, txPage: nil, txSize: nil) // } // // override func viewDidLoad() { // super.viewDidLoad() // // setUpNavBar(id: 201, title: "Wallet to Wallet Transfer") // // NotificationCenter.default.addObserver(self, selector: #selector(appMovedToForeground), name: Notification.Name.UIApplicationWillEnterForeground, object: nil) // // registerTapListener() // // // self.startLoading() // walletviewmodel.getTransactionInfo() // // scrollView.delegate = self // scrollView.addSubview(contentView) // scrollView.contentSize = CGSize(width: 2000, height:2000) // // if transaction != nil { // moneyRequestAccepted = true // segmentedControl.isUserInteractionEnabled = false // walletviewmodel.setMode(segmentIndex: 2) // walletviewmodel.setMoneyRequestTransactionID(id: transaction!.transactionId) // // textFieldID.text = transaction!.receiverId // textFieldAmount.text = transaction!.payoutAmountOriginal // // // textFieldID.isUserInteractionEnabled = false // } // textFieldID.delegate = self // textFieldAmount.delegate = self // textFieldMessage.delegate = self // // // segmentedControl.selectedSegmentIndex = 0 // segmentedControl.addTarget(self, action: #selector(modeChanged(_:)), for: .valueChanged) // // walletviewmodel.setMode(segmentIndex: 0) // } // // /** // Disable user interaction while fetching data from api // */ // func startLoading(){ // self.showActivityIndicator(activityIndicator: self.activityIndicator) // self.disableUserInteractions() // } // // /** // Enable user interaction while fetching data from api // */ // func stopLoading(){ // self.dismissActivityIndicator(activityIndicator: self.activityIndicator) // self.enableUserInteractions() // } // // /** // Check internet connection // */ // func setUpNetworkListener() { // walletviewmodel.internetConnection.bind { [unowned self] in // guard $0 != nil else { // return // } // self.walletviewmodel.internetConnection.value = nil // self.stopLoading() // self.popUpMessage(value: 15) // } // } // // func setUpNetworkListenerForProfile() { // profileviewmodel.internetConnection.bind { [unowned self] in // guard $0 != nil else { // return // } // self.profileviewmodel.internetConnection.value = nil // self.stopLoading() // self.popUpMessage(value: 15) // } // } // // /** // Set GMEUser name // */ // func setUpProfileListener() { // profileviewmodel.userDataAvailable.bind { [unowned self] in // guard $0 != nil else { // return // } // self.stopLoading() // if !($0!) { // if WalletViewController.walletConnectionTimeOutCheck == 0{ // WalletViewController.walletConnectionTimeOutCheck = WalletViewController.walletConnectionTimeOutCheck+1 // self.popUpMessageError(value: 10, message: self.profileviewmodel.getErrorMessage()) // } // } else { // if !self.profileviewmodel.hasFilledKYC() { // self.popUpMessageError(value: 11, message: "User has not filled KYC form") // } else { // self.walletviewmodel.setGMEUsername(fullName: self.profileviewmodel.getFullName()) // self.performSegue(withIdentifier: "walletReview", sender: nil) // } // } // self.profileviewmodel.userDataAvailable.value = nil // } // } // // /** // Update the view with the transaction count // */ // func setUpTransactionListener() { // tracktransactionviewmodel.transactionListObtained.bind{ [weak self] in // guard $0 != nil else { // return // } // guard $0! else { // return // } // let requestCount = self?.tracktransactionviewmodel.getCount() // self?.buttonMoneyRequestCount.setTitle(String(requestCount!), for: .normal) // // if requestCount != nil { // if requestCount! > 0 { // self?.buttonMoneyRequestCount.isUserInteractionEnabled = true // } // } // } // } // // /** // Set maximum amount // */ // func setUpWalletDetailsListener() { // walletviewmodel.walletLimitsFetched.bind{ [unowned self] in // guard $0 != nil else { // return // } // self.stopLoading() // guard $0! else { // if WalletViewController.walletConnectionTimeOutCheck == 0{ // WalletViewController.walletConnectionTimeOutCheck = WalletViewController.walletConnectionTimeOutCheck+1 // self.popUpMessageError(value: 10, message: self.walletviewmodel.getErrorMessage()) // } // self.walletviewmodel.walletLimitsFetched.value = nil // self.buttonSubmit.isUserInteractionEnabled = false // return // } // self.textFieldAmount.placeholder = "Maximum Amount" + " " + self.walletviewmodel.getMaximumTransferLimit() + " " + "KRW" // self.walletviewmodel.walletLimitsFetched.value = nil // } // } // // @objc func modeChanged(_ segControl: UISegmentedControl) { // // textFieldID.text = "" // textFieldMessage.text = "" // textFieldAmount.text = "" // // switch segControl.selectedSegmentIndex { // case 0: // labelID.text = "GME User ID of Receiver" // buttonSubmit.setTitle("Transfer", for: .normal) // walletviewmodel.setMode(segmentIndex: 0) // case 1: // labelID.text = "GME User ID of Sender" // buttonSubmit.setTitle("Request", for: .normal) // walletviewmodel.setMode(segmentIndex: 1) // default: // break // } // } // // // @IBAction func reviewTransferDetails(_ sender: Any) { // activeTextField?.resignFirstResponder() // // walletviewmodel.setParam(amount: textFieldAmount.text!, // gmeID: textFieldID.text!, // message: textFieldMessage.text!) // // switch walletviewmodel.validateFields() { // case .Valid: // self.startLoading() // profileviewmodel.fetchUserInfo(userId: walletviewmodel.getGMEID()) // case .InValid(let validationError): // self.popUpMessageError(value: 11, message: validationError) // } // } // // override func prepare(for segue: UIStoryboardSegue, sender: Any?) { // switch segue.identifier { // case "walletReview"?: // let walletReviewViewController // = segue.destination as! WalletReviewViewController // walletReviewViewController.walletviewmodel = self.walletviewmodel // walletReviewViewController.moneyRequestAccepted = self.moneyRequestAccepted // case "walletTransfer"?: // activeTextField?.resignFirstResponder() // let walletTransactionListViewController // = segue.destination as! WalletTransactionListViewController // walletTransactionListViewController.walletStatus = "walletTransfer" // case "walletBorrow"?: // activeTextField?.resignFirstResponder() // let walletTransactionListViewController // = segue.destination as! WalletTransactionListViewController // walletTransactionListViewController.walletStatus = "walletBorrow" // case "moneyRequest"?: // activeTextField?.resignFirstResponder() // let moneyRequestViewController // = segue.destination as! MoneyRequestViewController // moneyRequestViewController.moneyRequests = tracktransactionviewmodel.getTransactions() // default: // return // } // // } //} // //extension WalletViewController: UITextFieldDelegate { // // // func textFieldDidBeginEditing(_ textField: UITextField) { // // activeTextField = textField // // checkScroll() // // if textField == textFieldAmount { // if textField.text!.contains("KRW") { // textField.text = textField.text!.replacingOccurrences(of: " KRW", with: "", options: NSString.CompareOptions.literal, range: nil) // } // } // } // // func textFieldDidEndEditing(_ textField: UITextField) { // // checkScroll() // // if textField == textFieldAmount { // if textField.text != "" && !textField.text!.contains("KRW") { // textField.text!.append(" KRW") // } // } // } // // func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { // // let inputText = (textField.text! as NSString).replacingCharacters(in: range, with: string) // if textField == textFieldAmount { // //^[0-9]+$ // if NSPredicate(format:"SELF MATCHES %@", "[0-9]*$").evaluate(with: inputText) { // return true // } // return false // } // return true // } // // func textFieldShouldReturn(_ textField: UITextField) -> Bool { // switch textField { // case textFieldID: // textFieldAmount.becomeFirstResponder() // case textFieldMessage: // textFieldMessage.resignFirstResponder() // default: // return false // } // return true // } //} // //extension WalletViewController: ScrollableProtocol { // var offset: CGFloat { // get { // return stackView.frame.origin.y - 20 // } // } // // var viewScrolled: Bool { // get { // return isScrolled // } // } // // /** // Scroll logic // */ // func checkScroll() { // if !viewScrolled { // performScroll(direction: 0) // isScrolled = !isScrolled // } else { // performScroll(direction: 1) // isScrolled = !isScrolled // } // } // // func registerTapListener() { // let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(clearKeyboard)) // view.addGestureRecognizer(tap) // } // // /** // Dismiss keypad // */ // @objc func clearKeyboard() { // activeTextField?.resignFirstResponder() // if viewScrolled { // performScroll(direction: 1) // isScrolled = !isScrolled // } // } // // /** // Active keypad if direction is equal to 0 // - parameter direction: display keypad if direction is equal to 0 // */ // func performScroll(direction: Int) { // if direction == 0 { // UIView.animate(withDuration: 0.3, animations: { // self.view.frame = self.view.frame.offsetBy(dx: 0, dy: self.offset * -1) // }) // } else if direction == 1 { // UIView.animate(withDuration: 0.3, animations: { // self.view.frame = self.view.frame.offsetBy(dx: 0, dy: self.offset) // }) // } } }