import coolink from '../coolink/api';
import cooInfo, { setCooInfo } from '../shared/cooInfo';
import { linkingMessageOnRecv } from '../coolink-base/messageProcess'

//import Util from '../manager/UtilManager';

let getSystemInfoFinishFlag = false;
let getAppInfoFinishFlag = false;

function clearFinishFlag() {
    getSystemInfoFinishFlag = false;
    getAppInfoFinishFlag = false;
}

function channelStartupFinish() {
    if (getSystemInfoFinishFlag &&
        getAppInfoFinishFlag
    ) {
        return true;
    } else {
        return false;
    }
}

export default async function channelStartup() : Promise<void> {
    //Util.log('channelStartup()');
    clearFinishFlag();

    let getBaseInfo = new Promise((resolve, reject) => {
        /////////////////////////////////////////////////////////////////////////
        // 获取系统信息
        coolink.baseinfo.getSystemInfo()
            .then((res) => {
                //Util.log('getSystemInfo 1: ' + JSON.stringify(res));
                setCooInfo({ systemInfo: JSON.parse(JSON.stringify(res)) });
                //
                getSystemInfoFinishFlag = true;         // 设置该项完成标志
                if (channelStartupFinish()) {
                    resolve(0);
                }
            })
            .catch((err) => {
                getSystemInfoFinishFlag = true;         // 设置该项完成标志
                if (channelStartupFinish()) {
                    reject();
                }
            });
        /////////////////////////////////////////////////////////////////////////
        // 获取APP信息
        coolink.baseinfo.getAppInfo()
            .then((res) => {
                //Util.log('getAppInfo 1: ' + JSON.stringify(res));
                setCooInfo({ appInfo: JSON.parse(JSON.stringify(res)) });
                getAppInfoFinishFlag = true;            // 设置该项完成标志
                if (channelStartupFinish()) {
                    resolve(0);
                }
            })
            .catch((err) => {
                getAppInfoFinishFlag = true;            // 设置该项完成标志
                if (channelStartupFinish()) {
                    reject();
                }
            });
    });
    
    await getBaseInfo;

    /////////////////////////////////////////////////////////////////////////
    let miniAppCode = '';
    if (cooInfo?.infos?.appInfo?.miniAppCode) {
        miniAppCode = cooInfo.infos.appInfo.miniAppCode;
    } else {
        miniAppCode = 'coolink-mobile-applet/coo-movie';//'miniApp_debug_example';
    }
    setCooInfo({ miniAppCode });

    coolink.protocol.registerMessageReceiver({
        miniAppCode: miniAppCode,
        callback: linkingMessageOnRecv,
    });

    return;
}


