import ContentsquareSDK
import WebKit

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

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

    init(_ CSQType: _CSQ.Type) {
        self.CSQType = CSQType
        super.init()
    }

    /// Configure Product Analytics
    /// - Parameters:
    ///   - envId: environmentId defined for the app
    ///   - productAnalyticsOptions: additional options to configure Product Analytics as Dictionary from JavaScript
    @objc
    public func configureProductAnalytics(environmentID: String, additionalOptions: Dictionary<String, Any>) {

        // Convert Dictionary<String, Any> from JavaScript to [ProductAnalyticsOption: Any] for ContentsquareSDK
        var swiftOptions: [ProductAnalyticsOption: Any] = [:]

        for (key, value) in additionalOptions {
            let option: ProductAnalyticsOption? = {
                switch key {
                case "enableViewAutocapture": return .enableUIKitAutocapture
                case "enablePushNotificationAutocapture": return .enablePushNotificationAutocapture
                case "enablePushNotificationTitleAutocapture": return .enablePushNotificationTitleAutocapture
                case "enablePushNotificationBodyAutocapture": return .enablePushNotificationBodyAutocapture
                case "captureVendorId": return .captureVendorID
                case "captureAdvertiserId": return .captureAdvertiserID
                case "clearEventPropertiesOnNewUser": return .clearEventPropertiesOnNewUser
                case "disablePageviewAutocapture": return .disablePageviewAutocapture
                case "disablePageviewTitleAutocapture": return .disablePageviewTitleAutocapture
                case "disableInteractionAutocapture": return .disableInteractionAutocapture
                case "resumePreviousSession": return .resumePreviousSession
                case "disableScreenviewForwardToDXA": return .disableScreenviewForwardToDXA
                case "disableScreenviewForwardToPA": return .disableScreenviewForwardToPA
                case "uploadInterval": return .uploadInterval
                case "maximumBatchCountPerUpload": return .messageBatchByteLimit
                case "messageBatchMessageLimit": return .messageBatchMessageLimit
                case "baseUrl": return .baseURL
                default:
                    NSLog("Unknown ProductAnalyticsOption key: \(key)")
                    return nil
                }
            }()

            if let option = option {
                swiftOptions[option] = value
            }
        }

        CSQType.configureProductAnalytics(environmentID: environmentID, additionalOptions: swiftOptions)
    }
}

