//
//  SwitchInteractor.swift
//  AirbridgeReactNative
//
//  Created by WOF on 7/24/24.
//

import React
import Airbridge

@objc(SwitchInteractor)
class SwitchInteractor: NSObject {
    @objc(enableSDK)
    func enableSDK() {
        Airbridge.enableSDK()
    }
    
    @objc(disableSDK)
    func disableSDK() {
        Airbridge.disableSDK()
    }
    
    @objc(isSDKEnabled:reject:)
    func isSDKEnabled(
        _ resolve: RCTPromiseResolveBlock,
        _ reject: RCTPromiseRejectBlock
    ) {
        resolve(Airbridge.isSDKEnabled)
    }
    
    @objc(startTracking)
    func startTracking() {
        Airbridge.startTracking()
    }
    
    @objc(stopTracking)
    func stopTracking() {
        Airbridge.stopTracking()
    }
    
    @objc(isTrackingEnabled:reject:)
    func isTrackingEnabled(
        _ resolve: RCTPromiseResolveBlock,
        _ reject: RCTPromiseRejectBlock
    ) {
        resolve(Airbridge.isTrackingEnabled)
    }

    @objc(startInAppPurchaseTracking)
    func startInAppPurchaseTracking() {
        Airbridge.startInAppPurchaseTracking()
    }

    @objc(stopInAppPurchaseTracking)
    func stopInAppPurchaseTracking() {
        Airbridge.stopInAppPurchaseTracking()
    }

    @objc(isInAppPurchaseTrackingEnabled:reject:)
    func isInAppPurchaseTrackingEnabled(
        _ resolve: RCTPromiseResolveBlock,
        _ reject: RCTPromiseRejectBlock
    ) {
        resolve(Airbridge.isInAppPurchaseTrackingEnabled)
    }

    @objc(allowTrackingItem:)
    func allowTrackingItem(_ item: String) {
        if let value = convertAirbridgeTrackingBlocklist(item: item) {
            Airbridge.allowTrackingItem(value)
        }
    }

    @objc(blockTrackingItem:)
    func blockTrackingItem(_ item: String) {
        if let value = convertAirbridgeTrackingBlocklist(item: item) {
            Airbridge.blockTrackingItem(value)
        }
    }
    
    func convertAirbridgeTrackingBlocklist(item: String) -> AirbridgeTrackingBlocklist? {
        switch(item.lowercased()) {
            case AirbridgeTrackingBlocklist.idfa.description.lowercased() : return .idfa
            case AirbridgeTrackingBlocklist.idfv.description.lowercased() : return .idfv
            case AirbridgeTrackingBlocklist.skAdNetwork.description.lowercased() : return .skAdNetwork
            default : return nil
        }
    }
}
