//
//  AirbridgeJSONSwizzler.swift
//  AirbridgeQA
//
//  Created by ab180 on 3/4/25.
//

import Foundation
import ObjectiveC.runtime
import AirbridgeQALibrary

@objc(AirbridgeJSONSwizzler_Swift)
public class AirbridgeJSONSwizzler: NSObject {
  
  @objc
  public static func swizzleLoadAirbridgeJSON() {
    guard let airbridgeJSONSwizzlerClassType = NSClassFromString("AirbridgeJSONSwizzler_Swift") else {
        NSLog("Swizzling AirbridgeJSON failed: Class not found.")
        return
    }
    
    guard let airbridgeJSONClassType = NSClassFromString("AirbridgeJSON_Swift") else {
        NSLog("Swizzling AirbridgeJSON failed: Class not found.")
        return
    }
    
    let originalSelector = NSSelectorFromString("loadAirbridgeJSON")
    let swizzledSelector = NSSelectorFromString("swizzled_loadAirbridgeJSON")
    
    guard let originalMethod = class_getClassMethod(airbridgeJSONClassType, originalSelector),
          let swizzledMethod = class_getClassMethod(airbridgeJSONSwizzlerClassType, swizzledSelector) else {
      NSLog("Swizzling AirbridgeJSON failed: Methods not found.")
      return
    }
    
    let swizzledIMP = method_getImplementation(swizzledMethod)
    method_setImplementation(originalMethod, swizzledIMP)
    NSLog("Swizzling AirbridgeJSON successfully")
  }
  
  @objc(swizzled_loadAirbridgeJSON)
  class func swizzled_loadAirbridgeJSON() -> [AnyHashable: Any]? {
    let configuration = SDKConfigurationManager.shared.load() ?? {
      NSLog("Swizzling AirbridgeJSON SDKConfigurationManager failed")
      try? SDKConfigurationManager.shared.reset()
      return SDKConfigurationManager.shared.configuration
    }()
    
    var newDic = configuration.toAirbridgeJSON()
    
    // ios - 4.4.2 기준
    // configuration.toAirbridgeJSON() 에 아래 항목 누락으로 따로 추가 함.
    // trackingLinkCustomDomains
    // collectTCFDataEnabled
    // inAppPurchaseEnvironment
    newDic["trackingLinkCustomDomains"] = [
      "qaabr.dev.abr.ge",
      "qaabr.dev1.abr.ge",
      "qaabr.dev2.abr.ge",
      "qaabr.dev.airbridge.io",
      "qaabr.dev1.airbridge.io",
      "qaabr.dev2.airbridge.io",
      "qa.ab180.co",
      "qa.dev.ab180.co",
      "qa.dev1.ab180.co",
      "qa.dev2.ab180.co",
      "xn--qa--bw8n.xn--ob0bx63e.com"
    ]
    newDic["collectTCFDataEnabled"] = configuration.isCollectTCFDataEnabled
    newDic["inAppPurchaseEnvironment"] = configuration.inAppPurchaseEnvironment
    
    configuration.applyToStorage()
    NSLog("Swizzling AirbridgeJSON loadOption: \(newDic)")
    return newDic
  }
}
