/**
 * 主场景
 */

cc.Class({
    extends: cc.Component,

    properties: {
        // 标题
        title: {
            default: null,
            type: cc.Label,
        },

        // 选项（带声音）
        op_sound: {
            default: null,
            type: cc.Prefab,
        },

        // 选项（图片）
        op_pic: {
            default: null,
            type: cc.Prefab,
        },
    },

    // 生命周期 onLoad
    onLoad() {
        this.initSceneData();
        this.initSize();
    },

    _imageResList: null,
    _audioResList: null,
    _animaResList: null,
    initSceneData() {
        this._imageResList = [];
        this._audioResList = [];
        this._animaResList = [];
    },

    _designSize: null, // 设计分辨率
    _frameSize: null, // 屏幕分辨率
    _mapScaleMin: null, // 场景中常用缩放（取大值）
    _mapScaleMax: null, // 场景中常用缩放（取小值）
    _cocosScale: null, // cocos 自缩放 （较少用到）
    initSize() {
        // 注意cc.winSize只有在适配后(修改fitHeight/fitWidth后)才能获取到正确的值,因此使用cc.getFrameSize()来获取初始的屏幕大小
        let screen_size = cc.view.getFrameSize().width / cc.view.getFrameSize().height;
        let design_size = cc.Canvas.instance.designResolution.width / cc.Canvas.instance.designResolution.height;
        let f = screen_size >= design_size;
        cc.Canvas.instance.fitHeight = f;
        cc.Canvas.instance.fitWidth = !f;

        const frameSize = cc.view.getFrameSize();
        this._frameSize = frameSize;

        this._designSize = cc.view.getDesignResolutionSize();

        let sx = cc.winSize.width / frameSize.width;
        let sy = cc.winSize.height / frameSize.height;
        this._cocosScale = Math.min(sx, sy);

        sx = frameSize.width / this._designSize.width;
        sy = frameSize.height / this._designSize.height;
        this._mapScaleMin = Math.min(sx, sy) * this._cocosScale;
        this._mapScaleMax = Math.max(sx, sy) * this._cocosScale;
    },

    // 生命周期 start
    start() {
        let getData = this.getData.bind(this);
        if (window && window.courseware) {
            getData = window.courseware.getData;
        }

        getData((data) => {
            console.log("data:", data);
            this.data = data;
            this.data = JSON.parse(JSON.stringify(this.data));
            this.preloadItem();
        });
    },

    preloadItem() {
        this.addPreloadImage();
        this.addPreloadAudio();
        this.addPreloadAnima();
        this.preload();
    },

    addPreloadImage() {
        for (var i = 0; i < this.data.total; i++) {
            this._imageResList.push({ url: this.data["pic_url_" + i] });
        }
    },

    addPreloadAudio() {
        for (var i = 0; i < this.data.total; i++) {
            this._audioResList.push({ url: this.data["audio_url_" + i] });
        }
    },

    addPreloadAnima() {},

    preload() {
        const preloadArr = this._imageResList.concat(this._audioResList).concat(this._animaResList);
        cc.assetManager.loadAny(preloadArr, null, null, (err, data) => {
            this.loadEnd();
            if (window && window["air"]) {
                window["air"].hideAirClassLoading();
            }

            cc.debug.setDisplayStats(false);
        });
    },

    loadEnd() {
        this.initData();
        this.initAudio();
        this.initView();
        // this.initListener();
    },

    _cantouch: null,
    initData() {
        // 所有全局变量 默认都是null
        this._cantouch = true;
    },

    audioBtn: null,
    initAudio() {
        const audioNode = cc.find("Canvas/res/audio");

        const getAudioByResName = (resName) => {
            return audioNode.getChildByName(resName).getComponent(cc.AudioSource);
        };

        this.audioBtn = getAudioByResName("btn");
    },

    initView() {
        this.initBg();
        this.initPic();

        // 初始化title
        this.title.string = this.data.title;
        this.title.node.on(cc.Node.EventType.TOUCH_START, () => {
            this.playAudioByUrl(this.data.audio_title);
        });

        // for (var i = 0; i < this.data.total; i++) {
        //     const op_s = cc.instantiate(this.op_sound);
        //     op_s.getComponent("op_sound")._opId = i;
        //     op_s.getComponent("op_sound")._soundUrl = this.data["audio_url_" + i];

        //     const op_p = cc.instantiate(this.op_pic);
        //     op_p.getComponent("op_pic")._opId = i;
        //     op_p.getComponent("op_pic").setPic(this.data["pic_url_" + i]);
        // }
    },

    initBg() {
        const bgNode = cc.find("Canvas/bg");
        bgNode.scale = this._mapScaleMax;
    },

    pic1: null,
    pic2: null,
    initPic() {
        const canvas = cc.find("Canvas");
        const maxW = canvas.width * 0.7;

        this.getSprNodeByUrl(this.data.pic_url, (sprNode) => {
            const picNode1 = sprNode;
            picNode1.scale = maxW / picNode1.width;
            picNode1.baseX = picNode1.x;
            canvas.addChild(picNode1);
            this.pic1 = picNode1;

            const labelNode = new cc.Node();
            labelNode.color = cc.Color.YELLOW;
            const label = labelNode.addComponent(cc.Label);
            label.string = this.data.text;
            label.fontSize = 60;
            label.lineHeight = 60;
            label.font = cc.find("Canvas/res/font/BRLNSDB").getComponent("cc.Label").font;
            picNode1.addChild(labelNode);
        });

        this.getSprNodeByUrl(this.data.pic_url_2, (sprNode) => {
            const picNode2 = sprNode;
            picNode2.scale = maxW / picNode2.width;
            canvas.addChild(picNode2);
            picNode2.x = canvas.width;
            picNode2.baseX = picNode2.x;
            this.pic2 = picNode2;

            const labelNode = new cc.Node();
            const label = labelNode.addComponent(cc.RichText);
            const size = 60;
            label.font = cc.find("Canvas/res/font/BRLNSDB").getComponent(cc.Label).font;
            label.string = `<outline color=#751e00 width=4><size=${size}><color=#ffffff>${this.data.text}</color></size></outline>`;
            label.lineHeight = size;
            picNode2.addChild(labelNode);
        });
    },

    // ------------------------------------------------
    getSprNode(resName) {
        const sf = cc.find("Canvas/res/img/" + resName).getComponent(cc.Sprite).spriteFrame;
        const node = new cc.Node();
        node.addComponent(cc.Sprite).spriteFrame = sf;
        return node;
    },

    getSpriteFrimeByUrl(url, cb) {
        cc.loader.load({ url }, (err, img) => {
            const spriteFrame = new cc.SpriteFrame(img);
            if (cb) {
                cb(spriteFrame);
            }
        });
    },

    getSprNodeByUrl(url, cb) {
        const node = new cc.Node();
        const spr = node.addComponent(cc.Sprite);
        this.getSpriteFrimeByUrl(url, (sf) => {
            spr.spriteFrame = sf;
            if (cb) {
                cb(node);
            }
        });
    },

    playAudioByUrl(audio_url, cb = null) {
        if (audio_url) {
            cc.assetManager.loadRemote(audio_url, (err, audioClip) => {
                const audioId = cc.audioEngine.play(audioClip, false, 0.8);
                if (cb) {
                    cc.audioEngine.setFinishCallback(audioId, () => {
                        cb();
                    });
                }
            });
        }
    },

    // ------------------------------------------
});
