window.boot = function () {
    var settings = window._CCSettings;
    window._CCSettings = undefined;
    var onProgress = null;

    var RESOURCES = cc.AssetManager.BuiltinBundleName.RESOURCES;
    var INTERNAL = cc.AssetManager.BuiltinBundleName.INTERNAL;
    var MAIN = cc.AssetManager.BuiltinBundleName.MAIN;
    var splash = document.getElementById('splash');
    var progressBar = splash.querySelector('.progress-bar span');
    var update_label = document.getElementById("updateLabel");
    var prog_label = document.getElementById("progressLabel");
    var prog_handle;
    var prog_virtual = 11;
    function setLoadingDisplay() {
        // Loading splash scene
        onProgress = function (finish, total) {
            let prog = 40 + 100 * finish / total * 0.4;
            prog_virtual = Math.max(prog, prog_virtual);
            prog_virtual = Math.min(prog_virtual, 99);
            window.login_prog = prog_virtual;
            if (finish == total) {
                clearInterval(prog_handle);
            }
        };
        splash.style.display = 'block';

        cc.director.once(cc.Director.EVENT_AFTER_SCENE_LAUNCH, function () {
            splash.style.display = 'none';
        });
    }

    var onStart = function () {
        var myURL = new URL(window.location.href)
        var searchParams = new URLSearchParams(myURL.search);
        const param_api_token = searchParams.get('userToken');
        cc.view.enableRetina(true);
        cc.view.resizeWithBrowserSize(true);
        cc.dynamicAtlasManager.enabled = false;

        if (cc.sys.isBrowser) {
            setLoadingDisplay();
        }

        if (cc.sys.isMobile) {
            // if (settings.orientation === 'landscape') {
            cc.view.setOrientation(cc.macro.ORIENTATION_LANDSCAPE);
            // }
            // else if (settings.orientation === 'portrait') {
            //     cc.view.setOrientation(cc.macro.ORIENTATION_PORTRAIT);
            // }
            cc.view.enableAutoFullScreen([
                cc.sys.BROWSER_TYPE_BAIDU,
                cc.sys.BROWSER_TYPE_BAIDU_APP,
                cc.sys.BROWSER_TYPE_WECHAT,
                cc.sys.BROWSER_TYPE_MOBILE_QQ,
                cc.sys.BROWSER_TYPE_MIUI,
                cc.sys.BROWSER_TYPE_HUAWEI,
                cc.sys.BROWSER_TYPE_UC,
            ].indexOf(cc.sys.browserType) < 0);
        }

        // Limit downloading max concurrent task to 2,
        // more tasks simultaneously may cause performance draw back on some android system / browsers.
        // You can adjust the number based on your own test result, you have to set it before any loading process to take effect.
        if (cc.sys.isBrowser) {
            cc.assetManager.downloader.maxConcurrency = 8;
            cc.assetManager.downloader.maxRequestsPerFrame = 4;
        }

        var launchScene = settings.launchScene;
        if (param_api_token) {
            launchScene = "db://assets/scene/club_api.fire"
        }
        var bundle = cc.assetManager.bundles.find(function (b) {
            return b.getSceneInfo(launchScene);
        });

        bundle.loadScene(launchScene, null, onProgress,
            function (err, scene) {
                if (!err) {
                    if (param_api_token) {
                        update_label.innerHTML = "正在登录游戏中，请稍后";
                        // progressBar.style.setProperty("--progress", "80%");
                        // prog_label.innerHTML = '80%'
                    }
                    cc.director.runSceneImmediate(scene);
                    if (cc.sys.isBrowser) {
                        // show canvas
                        var canvas = document.getElementById('GameCanvas');
                        canvas.style.visibility = '';
                        var div = document.getElementById('GameDiv');
                        if (div) {
                            div.style.backgroundImage = '';
                        }
                        console.log('Success to load scene: ' + launchScene);
                    }
                }
            }
        );

    };

    var option = {
        id: 'GameCanvas',
        debugMode: settings.debug ? cc.debug.DebugMode.INFO : cc.debug.DebugMode.ERROR,
        showFPS: settings.debug,
        frameRate: 60,
        groupList: settings.groupList,
        collisionMatrix: settings.collisionMatrix,
    };

    // if (!settings.debug && cc.sys.isBrowser && !cc.sys.isNative && !cc.sys.isMobile) {
    //     alert(decodeURI('%E8%AF%B7%E4%BD%BF%E7%94%A8%E6%89%8B%E6%9C%BA%E5%AE%A2%E6%88%B7%E7%AB%AF%E6%88%96%E8%80%85%E6%89%8B%E6%9C%BA%E6%B5%8F%E8%A7%88%E5%99%A8%E7%99%BB%E9%99%86%EF%BC%81'));
    //     return;
    // }

    cc.assetManager.init({
        bundleVers: settings.bundleVers,
        remoteBundles: settings.remoteBundles,
        server: settings.server
    });

    var bundleRoot = [INTERNAL];
    settings.hasResourcesBundle && bundleRoot.push(RESOURCES);

    var count = 0;
    function cb(err) {
        if (err) return console.error(err.message, err.stack);
        count++;
        prog_virtual = 12 + 100 * count / (bundleRoot.length + 1) * 0.2;
        if (count === bundleRoot.length + 1) {
            update_label.innerHTML = "正在为您加载游戏场景";
            cc.assetManager.loadBundle(MAIN, function (err) {
                if (!err) cc.game.run(option, onStart);
            });
        }
    }

    update_label.innerHTML = "正在为您加载资源";
    progressBar.style.setProperty("--progress", '11%');
    prog_label.innerHTML = '11%'
    cc.assetManager.loadScript(settings.jsList.map(function (x) { return 'src/' + x; }), cb);

    prog_handle = setInterval(() => {
        prog_virtual += 0.1;
        prog_virtual = Math.min(prog_virtual, 99);
        if (progressBar) {
            progressBar.style.setProperty("--progress", prog_virtual.toFixed(2) + '%');
            prog_label.innerHTML = Math.floor(prog_virtual) + '%'
        }
    }, 100)

    for (var i = 0; i < bundleRoot.length; i++) {
        cc.assetManager.loadBundle(bundleRoot[i], cb);
    }
};