// Copyright © 2022 Olo Inc. All rights reserved.
// This software is made available under the Olo Pay SDK License (See LICENSE.md file)
//
//  DigitalWalletButton.swift
//  OlopaysdkReactNative
//
//  Created by Justin Anderson on 4/18/25.
//

@objc class DigitalWalletButton: OloPayView {
    private var digitalWalletController: DigitalWalletButtonController? {
        get { return viewController as? DigitalWalletButtonController }
    }
    
    @objc override init(frame: CGRect) {
        super.init(frame: frame)
    }
    
    @objc required init?(coder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    // This method allows React Native to change the size of the native view
    // to keep the native view and it's React Native host view size in sync
    override func reactSetFrame(_ frame: CGRect) {
        super.reactSetFrame(frame)
        self.frame = frame
        
        guard let digitalWalletController = digitalWalletController else {
            return
        }
        
        digitalWalletController.view.frame = frame
    }
    
    override func layoutSubviews() {
        super.layoutSubviews()
        reactSuperview().setNeedsLayout()
    }
    
    @objc public var isEnabled = true {
        didSet {
            guard let digitalWalletController = digitalWalletController else {
                viewIsDirty = true
                return
            }
            
            digitalWalletController.isEnabled = isEnabled
        }
    }
    
    @objc public var applePayConfig = NSDictionary() {
        didSet {
            guard let digitalWalletController = digitalWalletController else {
                viewIsDirty = true
                return
            }
            
            digitalWalletController.buttonConfig = applePayConfig
        }
    }
    
    override func createViewController() -> UIViewController {
        return DigitalWalletButtonController()
    }
    
    @objc var onClickedEvent: RCTDirectEventBlock? = nil {
        didSet {
            guard let digitalWalletController = digitalWalletController else {
                viewIsDirty = true
                return
            }
            
            digitalWalletController.onPress = onClickedEvent
        }
    }
    
    override func updateAllProperties() {
        guard let digitalWalletController = digitalWalletController else {
            return
        }
        
        digitalWalletController.isEnabled = isEnabled
        digitalWalletController.buttonConfig = applePayConfig
        digitalWalletController.onPress = onClickedEvent
    }
}
