import ContentsquareSDK
import ContentsquareModule

@objc(CSQInterfaceInitialization)
public class CSQInterfaceInitialization: NSObject {
    let CSQType: _CSQ.Type

    @objc
    public convenience override init() {
        self.init(CSQ.self)
    }

    init(_ CSQType: _CSQ.Type) {
        self.CSQType = CSQType
        super.init()
    }
    
    @objc
    public func start() {
        CSQType.start()
    }

    @objc
    public func stop() {
        CSQType.stop()
    }

    @objc
    public func pauseTracking() {
        CSQType.pauseTracking()
    }

    @objc 
    public func resumeTracking() {
        CSQType.resumeTracking()
    }

     @objc
    public func initComponents(params: Dictionary<String, Any>) {
        var updatedParams = params
#if RCT_NEW_ARCH_ENABLED
        updatedParams["xpf_rn_new_arch_enabled"] = true
#endif
        updatedParams["xpf_csq_sdk_enabled"] = true

        
        for (key, value) in updatedParams {
            switch key {
            case "xpf_type":
                let selectorXPFType = NSSelectorFromString("_setXPFType:")
                if Contentsquare.responds(to: selectorXPFType) {
                    _ = Contentsquare.perform(selectorXPFType, with: value)
                }
            case "xpf_version":
                let selectorXPFVersion = NSSelectorFromString("_setXPFVersion:")
                if Contentsquare.responds(to: selectorXPFVersion) {
                    _ = Contentsquare.perform(selectorXPFVersion, with: value)
                }
            case "xpf_bridge_version":
                let selectorXPFBridgeVersion = NSSelectorFromString("_setXPFBridgeVersion:")
                if Contentsquare.responds(to: selectorXPFBridgeVersion) {
                    _ = Contentsquare.perform(selectorXPFBridgeVersion, with: value)
                }
            default:
                let selectorCollect = NSSelectorFromString("_telemetryCollect:withValue:")
                if Contentsquare.responds(to: selectorCollect) {
                    _ = Contentsquare.perform(selectorCollect, with: key, with: value)
                }
            }
        }
    }
}

