import { _decorator } from 'cc';
import { oops } from 'db://oops-framework/core/Oops';
import { DeviceUtil } from 'db://oops-framework/core/utils/DeviceUtil';
import { AndroidEvent } from '../config/AndroidEvent';

/**
 * 安卓消息处理中心
 * 负责集中处理安卓平台相关的消息和事件
 */
export class AndroidMessageCenter {
    private static _instance: AndroidMessageCenter | null = null;

    private isInitialized: boolean = false;

    private constructor() {
        // 私有构造函数，确保单例模式
    }

    /**
     * 获取单例实例
     */
    public static getInstance(): AndroidMessageCenter {
        if (!this._instance) {
            this._instance = new AndroidMessageCenter();
        }
        return this._instance;
    }

    /**
     * 初始化安卓消息处理中心
     */
    public init(): void {
        if (this.isInitialized) return;

        oops.log.logConfig("AndroidMessageCenter", "初始化安卓消息处理中心");

        // 只在安卓平台注册事件监听
        if (DeviceUtil.isNative && DeviceUtil.isAndroid) {
            this.registerEventListeners();
        }

        this.isInitialized = true;
    }

    /**
     * 注册事件监听器
     */
    private registerEventListeners(): void {
        // 监听返回按键事件
        // oops.message.on(AndroidEvent.BACK_PRESSED, this.onBackPressed, this);

        // // 监听应用暂停事件
        // oops.message.on(AndroidEvent.APP_PAUSE, this.onAppPause, this);

        // // 监听应用恢复事件
        // oops.message.on(AndroidEvent.APP_RESUME, this.onAppResume, this);

        // // 监听网络状态变化事件
        // oops.message.on(AndroidEvent.NETWORK_CHANGE, this.onNetworkChange, this);

        // 可以根据需要添加更多事件监听

        oops.log.logConfig("AndroidMessageCenter", "注册安卓事件监听器成功");
    }

    // /**
    //  * 处理返回按键事件
    //  * @param data 事件数据
    //  */
    // private onBackPressed(data: any): void {
    //     oops.log.logConfig("AndroidMessageCenter", "处理返回按键事件");
    //     // 处理返回按键逻辑
    //     // 例如：判断当前UI栈，决定是返回上一级还是弹出退出确认框
    // }

    // /**
    //  * 处理应用暂停事件
    //  * @param data 事件数据
    //  */
    // private onAppPause(data: any): void {
    //     oops.log.logConfig("AndroidMessageCenter", "处理应用暂停事件");
    //     // 处理应用暂停逻辑
    //     // 例如：暂停游戏、保存数据等
    // }

    // /**
    //  * 处理应用恢复事件
    //  * @param data 事件数据
    //  */
    // private onAppResume(data: any): void {
    //     oops.log.logConfig("AndroidMessageCenter", "处理应用恢复事件");
    //     // 处理应用恢复逻辑
    //     // 例如：恢复游戏状态、检查网络连接等
    // }

    // /**
    //  * 处理网络状态变化事件
    //  * @param data 事件数据
    //  */
    // private onNetworkChange(data: any): void {
    //     oops.log.logConfig("AndroidMessageCenter", "处理网络状态变化事件");
    //     // 处理网络状态变化逻辑
    //     // 例如：显示网络断开提示、重新连接服务器等
    // }

    /**
     * 向原生层发送消息
     * @param eventName 事件名称
     * @param data 事件数据
     */
    public sendToNative(eventName: string, data?: any): void {
        if (!(DeviceUtil.isNative && DeviceUtil.isAndroid)) {
            oops.log.logConfig("AndroidMessageCenter", "当前不是安卓平台，无法发送原生消息");
            return;
        }

        const jsonData = data ? JSON.stringify(data) : "{}";
        oops.log.logConfig("AndroidMessageCenter", `发送消息到原生端: ${eventName}, 数据: ${jsonData}`);

        // 这里添加实际发送到原生端的代码
        // 例如通过 JSB 调用原生方法
    }

    /**
     * 清除所有事件监听（在游戏结束时调用）
     */
    public destroy(): void {
        if (!this.isInitialized) return;

        if (DeviceUtil.isNative && DeviceUtil.isAndroid) {
            // 移除所有事件监听
            // oops.message.off(AndroidEvent.BACK_PRESSED, this.onBackPressed, this);
            // oops.message.off(AndroidEvent.APP_PAUSE, this.onAppPause, this);
            // oops.message.off(AndroidEvent.APP_RESUME, this.onAppResume, this);
            // oops.message.off(AndroidEvent.NETWORK_CHANGE, this.onNetworkChange, this);

            // 移除其他可能添加的事件监听
        }

        this.isInitialized = false;
        oops.log.logConfig("AndroidMessageCenter", "销毁安卓消息处理中心");
    }
} 