const OC_ATSDK_MANAGER_CLASS = "ATSDKManager";
const OC_BRIDGE_CLASS = "ATJSBridge";

interface ATiOSJSInterface {
    initSDK(appid: string, appkey: string): void;
    initCustomMap(customMap: string): void;
    setPlacementCustomMap(placementId: string, customMap: string): void;
    setGDPRLevel(level: number): void;
    getGDPRLevel(): number;
    getUserLocation(callbackMethod: string): void;
    showGDPRAuth(): void;
    setLogDebug(debug: boolean): void;
    printJsLog(msg: string): void;
    deniedUploadDeviceInfo(deniedInfo: string): void;
}

const ATiOSJS: ATiOSJSInterface = {
    initSDK(appid: string, appkey: string): void {
        this.printJsLog(`ATiOSJS::initSDK(${appid}, ${appkey})`);
        jsb.reflection.callStaticMethod(OC_ATSDK_MANAGER_CLASS, "startWithAppID:appKey:", appid, appkey);
    },

    initCustomMap(customMap: string): void {
        this.printJsLog(`ATiOSJS::initCustomMap(${customMap})`);
        jsb.reflection.callStaticMethod(OC_ATSDK_MANAGER_CLASS, "setCustomData:", customMap);
    },

    setPlacementCustomMap(placementId: string, customMap: string): void {
        this.printJsLog(`ATiOSJS::setPlacementCustomMap(${placementId}, ${customMap})`);
        jsb.reflection.callStaticMethod(OC_ATSDK_MANAGER_CLASS, "setCustomData:forPlacementID:", customMap, placementId);
    },

    setGDPRLevel(level: number): void {
        this.printJsLog(`ATiOSJS::setGDPRLevel(${level})`);
        jsb.reflection.callStaticMethod(OC_ATSDK_MANAGER_CLASS, "setDataConsent:", level.toString());
    },

    getGDPRLevel(): number {
        this.printJsLog("ATiOSJS::getGDPRLevel()");
        return jsb.reflection.callStaticMethod(OC_ATSDK_MANAGER_CLASS, "dataConsent","");
    },

    getUserLocation(callbackMethod: string): void {
        this.printJsLog(`ATiOSJS::getUserLocation(${callbackMethod})`);
        jsb.reflection.callStaticMethod(OC_ATSDK_MANAGER_CLASS, "getUserLocationWithCallback:", callbackMethod);
    },

    showGDPRAuth(): void {
        this.printJsLog("ATiOSJS::showGDPRAuth()");
        jsb.reflection.callStaticMethod(OC_ATSDK_MANAGER_CLASS, "presentDataConsentDialog","");
    },

    setLogDebug(debug: boolean): void {
        this.printJsLog(`ATiOSJS::setLogDebug(${debug})`);
        jsb.reflection.callStaticMethod(OC_ATSDK_MANAGER_CLASS, "setDebugLog:", debug.toString());
    },

    printJsLog(msg: string): void {
        if (msg !== undefined && msg !== null) {
            jsb.reflection.callStaticMethod(OC_BRIDGE_CLASS, "log:", msg);
        }
    },

    deniedUploadDeviceInfo(deniedInfo: string): void {
        this.printJsLog(`ATiOSJS::deniedUploadDeviceInfo(${deniedInfo})`);
        jsb.reflection.callStaticMethod(OC_ATSDK_MANAGER_CLASS, "deniedUploadDeviceInfo:", deniedInfo);
    }
};

export default ATiOSJS;
