import Foundation
import React
import BlueStackSDK

@objc(BluestackModuleViewManager)
class BluestackModuleViewManager: RCTViewManager {
    override func view() -> BluestackBannerView {
        let view = BluestackBannerView(frame: .zero)
        return view
    }

    override static func requiresMainQueueSetup() -> Bool {
        return true  // true coz dealing with UI
    }

    // MARK: - Exported Methods
    @objc func create(_ reactTag: NSNumber, setPreference preferenceJSON: String) {
        DispatchQueue.main.async { [weak self] in
            guard let self = self else { return }
            
            // try synchronously first
            if let view = self.bridge?.uiManager.view(forReactTag: reactTag) as? BluestackBannerView {
//                print("Found view directly for tag \(reactTag)")
                view.create(preferenceJSON)
                return
            }
            
            // fallback: async block if direct lookup fails
            self.bridge?.uiManager.addUIBlock { (_, viewRegistry) in
//                print("Looking up view in registry for tag \(reactTag)")
                guard let view = viewRegistry?[reactTag] as? BluestackBannerView else {
//                    print("Cannot find BluestackBannerView with tag \(reactTag) in registry")
                    return
                }
                view.create(preferenceJSON)
            }
        }
    }

    @objc func destroy(_ reactTag: NSNumber) {
        DispatchQueue.main.async { [weak self] in
            guard let self = self else { return }
            
            // try synchronously first
            if let view = self.bridge?.uiManager.view(forReactTag: reactTag) as? BluestackBannerView {
                view.destroy()
                return
            }
            
            // fallback: async block if direct lookup fails
            self.bridge?.uiManager.addUIBlock { (_, viewRegistry) in
                guard let view = viewRegistry?[reactTag] as? BluestackBannerView else {
                    return
                }
                view.destroy()
            }
        }
    }

    @objc func refresh(_ reactTag: NSNumber, setState state: Bool) {
        DispatchQueue.main.async { [weak self] in
            guard let self = self else { return }
            
            // try synchronously first
            if let view = self.bridge?.uiManager.view(forReactTag: reactTag) as? BluestackBannerView {
                view.refresh(state)
                return
            }
            
            // fallback: async block if direct lookup fails
            self.bridge?.uiManager.addUIBlock { (_, viewRegistry) in
                guard let view = viewRegistry?[reactTag] as? BluestackBannerView else {
                    return
                }
                view.refresh(state)
            }
        }
    }
}

//@objc(BluestackModuleViewManager)
//class BluestackModuleViewManager: RCTViewManager {
//
//  override func view() -> (BluestackBannerView) {
//    return BluestackBannerView()
//  }
//    override static func requiresMainQueueSetup() -> Bool {
//      return false
//    }
//}
