//
//  ApplePay.swift
//
//  Created by Muhammad Bassiouny on 5/3/23.
//

import UIKit
import MFSDK


class MFApplePayButtonView: UIView {
  static let applePay = MFApplePayButtonView()
  let applePayButton = MFApplePayButton()
  
  @objc var applePayButtonStyle: NSDictionary? {
    didSet {
      applyViewProps()
    }
  }
  
  private override init(frame: CGRect) {
    super.init(frame: frame)
    setupView()
  }
 
  internal required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    setupView()
  }
 
  private func setupView() {
    self.addSubview(applePayButton)
    applePayButton.translatesAutoresizingMaskIntoConstraints = false
    applePayButton.leadingAnchor.constraint(equalTo: self.leadingAnchor).isActive = true
    applePayButton.trailingAnchor.constraint(equalTo: self.trailingAnchor).isActive = true
    applePayButton.widthAnchor.constraint(equalTo: self.widthAnchor).isActive = true
    applePayButton.centerYAnchor.constraint(equalTo: self.centerYAnchor).isActive = true
    applePayButton.heightAnchor.constraint(equalToConstant: 80).isActive = true
    
    self.isUserInteractionEnabled = true
  }
  
  private func applyViewProps() {
    guard let props = applePayButtonStyle else { return }
    let applePayConfigure = MFInApplePayConfigureBuilder.default
    
    if let height = props["Height"] as? CGFloat {
      applePayConfigure.setHeight(height)
    }
    if let borderRadius = props["BorderRadius"] as? CGFloat {
      applePayConfigure.setBorderRadius(borderRadius)
    }
    if let buttonText = props["ButtonText"] as? String {
      applePayConfigure.setButtonText(buttonText)
    }
    if let hideLoadingIndicator = props["HideLoadingIndicator"] as? Bool {
      applePayConfigure.hideLoadingIndicator(hideLoadingIndicator)
    }
      
    if let vendorName = props["VendorName"] as? String, !vendorName.isEmpty {
      applePayConfigure.setVendorame(vendorName)
    }
    
    applePayButton.configure = applePayConfigure.build()
  }
}
