/**
 * 对应 Unity Application.ExternalCall
 * Web 环境下调用 window 上的全局回调
 */

/** 对齐 Unity GameManager.ExternalLevelInfo（关卡加载完成时回传） */
export interface ExternalLevelInfo {
    LevelID: number;
    PlayerName: string;
    VehicleName: string;
}

declare global {
    interface Window {
        processData?: (json: string) => void;
        processVehicleData?: (json: string) => void;
        externalResult?: (json: string) => void;
        externalLevelInfo?: (json: string) => void;
        coinsData?: (json: string) => void;
        /** 主站对接：cocos-bridge.js 可选钩子 */
        __tfrhOnExternalLevelInfo?: (json: string) => void;
        [key: string]: unknown;
    }
}

export class JsBridge {
    static call(callbackName: string, jsonData: string) {
        if (typeof window !== 'undefined') {
            const fn = window[callbackName];
            if (typeof fn === 'function') {
                (fn as (json: string) => void)(jsonData);
                return;
            }
        }
        console.log(`[JsBridge] ${callbackName}`, jsonData);
    }

    /** Unity ExternalCallLevelInfo → Application.ExternalCall("externalLevelInfo", json) */
    static notifyExternalLevelInfo(info: ExternalLevelInfo) {
        const json = JSON.stringify(info);
        this.call('externalLevelInfo', json);
    }
}
