// Learn TypeScript:
//  - https://docs.cocos.com/creator/2.4/manual/en/scripting/typescript.html
// Learn Attribute:
//  - https://docs.cocos.com/creator/2.4/manual/en/scripting/reference/attributes.html
// Learn life-cycle callbacks:
//  - https://docs.cocos.com/creator/2.4/manual/en/scripting/life-cycle-callbacks.html

import { ryw_Event } from "../../../FrameWork/Event/EventEnum";
import EventMgr from "../../../FrameWork/Event/EventMgr";
import GameReport from "../../../FrameWork/Report/ZyZyReport";
import User from "../../../FrameWork/User/User";
import AppPlatform from "../../../FrameWork/Util/AppPlatform";
import Common from "../../../FrameWork/Util/Common";
import Common5 from "../../../Platform/th/Common5";
import TTAPI from "../../../Platform/tt/TTAPI";
import TaskManager, { MainTaskIdEnum } from "../../JuQingChat/TaskManager";
import PrefabManage, { GameType } from "../../PrefabManager/PrefabManage";
import { WenZiAwardMoney, WenZiGuoGuanLevel } from "./FirstLevelSelectView2";
import GameFailUI from "./GameFailUI";
// import MainScene from "./MainSceneScript";

const { ccclass, property } = cc._decorator;

@ccclass
export default class Game extends cc.Component {

    @property(cc.Node)
    backNode: cc.Node = null;

    @property(cc.Node)
    prefabNode: cc.Node = null;

    @property(cc.Node)
    maskNode: cc.Node = null;

    @property(cc.Sprite)
    timeSpript: cc.Sprite = null;


    @property(cc.Label)
    titleLabel: cc.Label = null;
    @property(cc.Label)
    timeLabel: cc.Label = null;
    @property(cc.Node)
    timeNode: cc.Node = null;

    @property(cc.Node)
    addtimeBtn: cc.Node = null;

    @property(cc.Node)
    tipAdNode: cc.Node = null;
    @property(cc.Node)
    tipNoAdNode: cc.Node = null;
    @property(cc.Node)
    answerNode: cc.Node = null;

    @property(cc.Node)
    guizeNode: cc.Node = null;
    @property(cc.Label)
    guizeLabel: cc.Label = null;
    @property(cc.Node)
    guizeBtnNode: cc.Node = null;
    @property(cc.Node)
    guizeCloseBtnNode: cc.Node = null;

    znzTime = 15;
    targetNode = [];
    isLoading = false;
    oldScale = 1;
    tempGameConfig = null;
    allTargetNum = 0;
    finishTargetNum = 0;
    allTime = 0;
    lefTime = 0;
    isFinish = false;
    playTime = 0;
    tmpUnlockSubLevel = -1;
    finishSub = [];
    // LIFE-CYCLE CALLBACKS:

    // onLoad () {}
    public static ins: Game = null;
    isExitTip = false;
    protected onLoad(): void {

        Game.ins = this;
        this.oldScale = this.node.scale;
        console.log(this.oldScale);
        this.node.active = false;
        EventMgr.onEvent_custom(ryw_Event.tooltipClose, () => {
            this.updateTishiBtn();
        }, this)


        Common5.playMusic("bg");

        // this.node.getChildByName("mask").height = this.node.getChildByName("mask").height * this.node.width/this.node.getChildByName("mask").width ;
        // this.node.getChildByName("mask").width = this.node.width;
    }
    start() {
        this.maskNode.getComponent(cc.Widget).updateAlignment();
        // this.prefabNode.getComponent(cc.Widget).updateAlignment();
        this.node.on(cc.Node.EventType.TOUCH_START, (event) => {
            //console.log(event.getLocation())
            // MainScene.ins.showClickEffect(event.getLocation())
        }, this, true)

        EventMgr.onEvent_custom(ryw_Event.startTimeTick, () => {

            if (Common5.selectGameInfo.isNeedTime) {
                this.isFinish = false
                this.schedule(this.refreshTime, 1)
            }

        }, this)
        EventMgr.onEvent_custom(ryw_Event.game_continue, () => {
            this.isFinish = false
            this.lefTime = Common5.selectGameInfo.timeInit;
            this.allTime = Common5.selectGameInfo.timeInit;
            this.schedule(this.refreshTime, 1)
        }, this)
        EventMgr.onEvent_custom(ryw_Event.stopTimeTick, () => {
            this.stopTime();
        }, this)
    }
    toolTip() {

    }
    closeGuize() {
        this.guizeNode.active = false;
    }
    showGui() {
        //this.guizeNode.active = true;

        EventMgr.emitEvent_custom(ryw_Event.openGuizeLayerEvent)
    }
    setGuizeText(str) {
        this.guizeLabel.string = str;
    }
    showSuccess() {
        this.stopTime();
        EventMgr.emitEvent_custom(ryw_Event.finish_game);
        this.playSuccessDadian()
        User.setUserIQAdd(1, Common5.selectGameNum)
        User.setSuccessLevels(Common5.selectGameNum);
        PrefabManage.loadPrefabByType(GameType.WZ_GameSuccessView)

        //完成任务108
        let levelArr = User.getSuccessLevels();
        let mainTaskInfo: any = TaskManager.getCurUnLockMainTaskInfo()
        let mainId = mainTaskInfo.Id
        let successNum = 0
        let arr = Common5.gameConfig.GameAllType[0].Levels
        for (let i = 0; i < arr.length; i++) {
            if (levelArr.indexOf(arr[i]) > -1) {
                successNum++
            }
        }
        // if(mainId == MainTaskIdEnum.MainTask_108 && successNum >= 1){
        //     TaskManager.finishCurMainTask(MainTaskIdEnum.MainTask_108)
        // }
        for (let i = 0; i < WenZiGuoGuanLevel.length; i++) {
            if (successNum == WenZiGuoGuanLevel[i]) {
                let money = WenZiAwardMoney[WenZiGuoGuanLevel.length - i - 1]
                // UserManager.addMoney(money)
                // PrefabManage.showTextTips(`奖励${money}已到账`)
                break
            }
        }

        let config = TaskManager.getTaskConfigById(mainId)
        //选票
        if (mainId == MainTaskIdEnum.MainTask_554_2 && config.taskXuanPiaoNum && User.getUserIQ() >= config.taskXuanPiaoNum) {
            TaskManager.finishCurMainTask(MainTaskIdEnum.MainTask_554_2)
            TaskManager.setCurTask(MainTaskIdEnum.MainTask_555)
        }
    }
    showFail() {
        this.stopTime();
        EventMgr.emitEvent_custom(ryw_Event.finish_game);
        PrefabManage.loadPrefabByType(GameType.WZ_GameFailView)


    }

    showFailFuHuo() {
        this.stopTime();
        EventMgr.emitEvent_custom(ryw_Event.finish_game);
        PrefabManage.loadPrefabByType(GameType.WZ_GameFailView, null, (node) => {
            node.getComponent(GameFailUI).setFuhuoActive();
        })
        // Common5.getPrefabFromBundle("ZoomGame","prefab/view/GameFailView",null,(node)=>{
        //     node.getComponent(GameFailUI).setFuhuoActive();
        // })

    }

    addTick(timeTick) {
        return;
        this.lefTime += timeTick;
        this.allTime += timeTick;
    }
    setTimePos(x, y) {
        // this.timeNode.setPosition(x,y);
    }
    setTimeScale(scale) {
        this.timeNode.scale = scale;
    }
    setTitle(title) {
        this.titleLabel.string = title;
    }
    refreshTime() {
        this.playTime++;
        console.log('this.lefTime==', this.lefTime)
        if (this.lefTime <= 0) {
            if (!this.isFinish) {
                console.error("fail++====refreshTime");
                this.finishThisGame();
                EventMgr.emitEvent_custom(ryw_Event.finish_game);
                // Common5.getPrefabFromBundle("ZoomGame","prefab/view/GameFailTimeOutView",null,(node)=>{
                //     // node.getComponent(GameFailUI).setAddTime(Common5.selectGameInfo.timeVideoAdd);
                // })
                PrefabManage.loadPrefabByType(GameType.WZ_GameFailTimeOutView)
            }
        }
        else {
            this.lefTime--;
            if (this.lefTime < 10) {
                Common5.playEffect("timeTick");
            }
            this.updateTimeProg();
        }
    }
    tipUnlock(subLevel) {
        User.unlockWordgameAnswer(Common5.selectGameNum, subLevel, 2);
        this.finishSub.push(subLevel);
        this.updateTishiBtn();

    }
    tipAd() {
        let tab = {
            onClose: (finish) => {
                if (finish) {
                    User.setShowAdNum(User.getShowAdNum() + 1)
                    Common5.ReportDY("inLevel", `任务${TaskManager.getCurUnLockMainTaskId()}-AD-` + Common5.selectGameInfo.title2  + "提示")
                    GameReport.ADReport(Common5.selectGameInfo.title2 + '提示', 1, "总裁训练营")

                    // Common5.ReportDY("inLevel", Common5.selectGameInfo.title2 + "-AD-提示");
                    if (Common.Type == 3) {
                        let index = 0;
                        let answer = User.getUnlockWordgameAnswer(Common5.selectGameNum)
                        if (answer) {
                            for (let i = 0; i < Common.GameSubTipConfigs.length; i++) {
                                if (answer[i] != 2) {
                                    index = i;
                                    break;
                                }
                            }
                        }
                        Common.subLevel = index;
                        User.unlockWordgameAnswer(Common5.selectGameNum, index, 2);
                        this.tipAdNode.active = false;
                        this.tipNoAdNode.active = true;
                        this.answerNode.active = false;
                        this.showTipAnswer();
                        return;
                    }
                    User.unlockWordgameAnswer(Common5.selectGameNum, Common.subLevel, 1);
                    if (Common.Type == 1) {
                        User.unlockWordgameAnswer(Common5.selectGameNum, Common.subLevel, 2);
                        this.updateTishiBtn();
                    }
                    this.showTipAnswer();
                    return;
                }
                else {
                    GameReport.ADReport(Common5.selectGameInfo.title2 + '提示', 0, "总裁训练营")

                    Common5.showTips_custom("广告未观看完");
                }
            }, onFailed: () => {
            }
        }
        AppPlatform.playVideo_custom(tab)
    }

    updateTishiBtn() {
        if (Common5.selectGameInfo.gameType != "guize") {
            this.guizeBtnNode.active = false;
        } else if (Common5.selectGameInfo.gameType == "guize") {
            this.guizeBtnNode.active = true;
        }


        let answer = User.getUnlockWordgameAnswer(Common5.selectGameNum)
        if (Common.Type == 3) {
            let index = -1;
            let answer = User.getUnlockWordgameAnswer(Common5.selectGameNum)
            if (answer) {
                for (let i = 0; i < this.finishSub.length; i++) {
                    if (answer[this.finishSub[i]] != 2) {
                        this.tipAdNode.active = false;
                        this.tipNoAdNode.active = true;
                        this.answerNode.active = false;
                        Common.subLevel = this.finishSub[i];
                        return;
                    }
                }
                for (let i = 0; i < Common.GameSubTipConfigs.length; i++) {
                    if (answer[i] == 2) {
                        let finish = false;
                        for (let j = 0; j < this.finishSub.length; j++) {
                            if (this.finishSub[j] == i) {
                                finish = true;
                                break;
                            }
                        }
                        if (!finish) {
                            this.tipAdNode.active = false;
                            this.tipNoAdNode.active = true;
                            this.answerNode.active = false;
                            Common.subLevel = this.finishSub[i];
                            return;
                        }
                    }
                }
                for (let i = 0; i < Common.GameSubTipConfigs.length; i++) {
                    if (answer[i] != 2) {
                        index = i;
                        break;
                    }
                }
                if (index == -1) {
                    this.tipAdNode.active = false;
                    this.tipNoAdNode.active = true;
                    this.answerNode.active = false;
                }
                else {
                    this.tipAdNode.active = true;
                    this.tipNoAdNode.active = false;
                    this.answerNode.active = false;
                }
                if (Common.subLevel == this.tmpUnlockSubLevel) {

                }
            }
            else {
                this.tipAdNode.active = true;
                this.tipNoAdNode.active = false;
                this.answerNode.active = false;
            }
            return;
        }

        if (answer) {
            let answerIndex = answer[Common.subLevel];

            console.log(answerIndex, Common.subLevel, 'answerIndex+++++++++++++======')
            if (answerIndex == 1) {
                this.tipAdNode.active = false;
                this.tipNoAdNode.active = true;
                this.answerNode.active = false;
            }
            else if (answerIndex == 2) {
                this.tipAdNode.active = false;
                this.tipNoAdNode.active = false;
                this.answerNode.active = true;
            } else {
                this.tipAdNode.active = true;
                this.tipNoAdNode.active = false;
                this.answerNode.active = false;
            }
        }
        else {
            this.tipAdNode.active = true;
            this.tipNoAdNode.active = false;
            this.answerNode.active = false;
        }

    }

    showTipAnswer() {
        PrefabManage.loadPrefabByType(GameType.WZ_tipPrefab)
        // Common5.getPrefabFromBundle("ZoomGame","prefab/view/tipPrefab",null,(node)=>{
        // })
    }
    finishThisGame() {
        // this.reset();
        this.isFinish = true;
        // this.node.scale = 0;
    }
    updateTimeProg() {
        this.timeSpript.fillRange = this.lefTime / this.allTime;
        let secondStr = "";
        let second = this.lefTime % 60;
        if (second < 10) {
            secondStr = "0" + second;
        }
        else {
            secondStr = second.toString();
        }
        this.timeLabel.string = Math.floor(this.lefTime / 60) + ":" + secondStr;
    }
    reset() {
        TTAPI.startRecord_custom();
        Common.SpeTip = "";
        // MainScene.ins.levelNode.active = false;
        if (Common5.selectGameInfo.gameTitle && Common5.selectGameInfo.gameTitle != "") {
            this.titleLabel.string = Common5.selectGameInfo.gameTitle;
            this.titleLabel.node.parent.active = true;
        }
        else {
            this.titleLabel.node.parent.active = false;
        }
        if (Common5.selectGameInfo.isNeedTime) {
            this.timeNode.active = true;
            this.addtimeBtn.active = true;
            this.lefTime = Common5.selectGameInfo.timeInit;
            this.allTime = Common5.selectGameInfo.timeInit;
            console.log(this.lefTime, this.allTime)
            this.updateTimeProg();
            this.resetTime();
        } else {
            this.timeNode.active = false;
            this.addtimeBtn.active = false;

        }
        this.node.active = true;
        this.updateTishiBtn();
        this.finishSub = [];
        // this.showFail();
        this.preLoadNext();
    }
    preLoadNext() {
        let nextLevel = -1;
        for (let i = 0; i < Common5.gameConfig.GameAllType[Common5.curWordGameType].Levels.length; i++) {
            let level = Common5.gameConfig.GameAllType[Common5.curWordGameType].Levels[i];
            if (level == Common5.selectGameNum) {
                if (i < (Common5.gameConfig.GameAllType[Common5.curWordGameType].Levels.length - 1)) {
                    nextLevel = Common5.gameConfig.GameAllType[Common5.curWordGameType].Levels[i + 1];
                    break;
                }
            }
        }
        if (nextLevel != -1) {
            console.log(Common5.gameConfig.zmGameConfig[nextLevel].bundle);

            let bundle = cc.assetManager.loadBundle(Common5.gameConfig.zmGameConfig[nextLevel].bundle, (err, bundle) => {
                bundle.load(Common5.gameConfig.zmGameConfig[nextLevel].bundle, cc.Prefab, () => {
                    console.log(nextLevel + "  preloadSuccess!")
                })
            })
            if (Common5.gameConfig.zmGameConfig[nextLevel].subbundle && Common5.gameConfig.zmGameConfig[nextLevel].subbundle != "") {
                let subbundle = cc.assetManager.loadBundle(Common5.gameConfig.zmGameConfig[nextLevel].subbundle, (err, subbundle) => {
                    subbundle.load(Common5.gameConfig.zmGameConfig[nextLevel].suburl, cc.Prefab, () => {
                        console.log(nextLevel + "  subbundle preloadSuccess!")
                    })
                })
            }
            // cc.assetManager.getBundle(Common5.gameConfig.zmGameConfig[nextLevel].bundle);
        }
    }
    resetTime() {
        this.isFinish = false
        this.schedule(this.refreshTime, 1)
    }
    stopTime() {
        this.unschedule(this.refreshTime);
    }
    clickBack(event, isReport) {
        // this.prefabNode.removeAllChildren();
        // this.node.active = false;
        if (this.isExitTip) {
            return
        }
        this.isExitTip = true
        PrefabManage.loadPrefabByType(GameType.WZ_ExitTip, null, () => {
            this.scheduleOnce(() => {
                this.isExitTip = false
            }, 0.1)
        })
        // Common5.getPrefabFromBundle("ZoomGame","prefab/view/ExitTip",null, ()=>{
        //     this.scheduleOnce(()=>{
        //         this.isExitTip = false
        //     },0.1)
        // });
    }

    clickBackTimeOut(event, isReport) {
        // this.prefabNode.removeAllChildren();
        // this.node.active = false;
        PrefabManage.loadPrefabByType(GameType.WZ_GameFailView)
        // Common5.getPrefabFromBundle("ZoomGame","prefab/view/GameFailView");
    }

    exitGame() {
        console.log("exitGame1")
        if (!cc.isValid(this.node)) {
            return
        }

        if (!cc.isValid(this.prefabNode)) {
            return
        }
        console.log("exitGame2")

        for (let i = 0; i < this.prefabNode.childrenCount; i++) {
            let childNode = this.prefabNode.children[i]
            console.log(childNode.name, '删除name++++++++++++++===')
            let name = childNode.name
            EventMgr.emitEvent_custom(ryw_Event.ExitBtnEvent, name);
        }
        this.prefabNode.destroyAllChildren();
        this.prefabNode.removeAllChildren();
        this.node.active = false;
        // MainScene.ins.levelNode.active = true;
        this.stopTime();
        Common5.stopMusic();
        this.scheduleOnce(() => {
            Common5.playMusic("bg");
        }, 0.1)
        this.node.removeFromParent()
        this.node.destroy()
    }
    setAnswerHide() {

    }
    addtimeClick() {
        Common5.playEffect("ui");

        let tab = {
            onClose: (finish) => {
                if (finish) {
                    User.setShowAdNum(User.getShowAdNum() + 1)
                    
                    GameReport.ADReport(Common5.selectGameInfo.title2 + '加时', 1, "总裁训练营")

                    if (Common5.selectGameInfo) {
                        Common5.ReportDY("inLevel", `任务${TaskManager.getCurUnLockMainTaskId()}-AD-` + Common5.selectGameInfo.title2  + "加时")
                        // Common5.ReportDY("inLevel", Common5.selectGameInfo.title2 + "-AD-加时");

                    }

                    this.lefTime = this.lefTime + Common5.selectGameInfo.timeVideoAdd;
                    this.allTime += Common5.selectGameInfo.timeVideoAdd;
                    EventMgr.emitEvent_custom(ryw_Event.addTimeSucc);
                    return;
                }
                else {
                    GameReport.ADReport(Common5.selectGameInfo.title2 + '加时', 0, "总裁训练营")

                    // this.node.removeFromParent();
                    Common5.showTips_custom("广告未观看完");
                }
            }, onFailed: () => {
            }
        }
        AppPlatform.playVideo_custom(tab)
    }


    setGameTitle(gameTitle) {
        this.titleLabel.node.parent.active = true;
        this.titleLabel.string = gameTitle;
    }


    playSuccessDadian() {
        let title = Common5.selectGameInfo.title2

        console.log(title + "-成功通关")
        Common5.ReportDY("inLevel", title + "-成功通关");

    }
    onRestartCallFunc() {
        let callFunc = this.restartCallFunc

        PrefabManage.loadPrefabByType(GameType.WZ_GameMain, null, () => {
            this.scheduleOnce(() => {
                this.node.removeFromParent()
                this.node.destroy()
                callFunc()
            })
        })
    }
    clearLastGameNode() {
        for (let i = 0; i < this.prefabNode.childrenCount; i++) {
            let childNode = this.prefabNode.children[i]
            console.log(childNode.name, '删除name++++++++++++++===')
            let name = childNode.name
            EventMgr.emitEvent_custom(ryw_Event.ExitBtnEvent, name);
        }

        this.node.removeFromParent()
        this.node.destroy()
    }
    restartCallFunc() {

        if (Common5.selectGameInfo.subbundle != "" && Common5.selectGameInfo.subbundle != undefined) {

            let subbundle = cc.assetManager.loadBundle(Common5.selectGameInfo.subbundle, (err, subbundle) => {
                cc.assetManager.loadBundle(Common5.selectGameInfo.bundle, function (err: Error, bundle: cc.AssetManager.Bundle) {
                    // MainScene.ins.GameNode.getChildByName("mask").getChildByName("prefabNode").destroyAllChildren();
                    // MainScene.ins.GameNode.getChildByName("mask").getChildByName("prefabNode").removeAllChildren();
                    Common5.getPrefabFromBundlePrefabLayer(Common5.selectGameInfo.bundle, Common5.selectGameInfo.url, Game.ins.node.getChildByName("mask").getChildByName("prefabNode"), (prefab) => {
                        // prefab.width = Game.ins.maskNode.width;
                        // prefab.height = Game.ins.maskNode.width;
                        // if (Common5.selectGameNum != 0){                        
                        //     User.setFirstIn(false);
                        // }

                        if (Common5.selectGameInfo.isTer) {
                            PrefabManage.loadPrefabByType(GameType.WZ_TerrTip)
                            // Common5.getPrefabFromBundle("ZoomGame","prefab/view/TerrTip");
                        }
                        User.setLeveNum_custom(Common5.selectGameNum);
                        // prefab.scale = Game.ins.maskNode.width/prefab.width;
                        // prefab.setPosition(0,0);
                        // console.log("prefab.width",prefab.width,prefab.height,prefab.position,MainScene.ins.GameNode.getChildByName("mask").getChildByName("prefabNode").position)
                        // Common5.hideTips_custom();
                        Game.ins.reset();
                        // MainScene.ins.isLoading = false;
                    })
                });
            })
        }
        else {

            cc.assetManager.loadBundle(Common5.selectGameInfo.bundle, function (err: Error, bundle: cc.AssetManager.Bundle) {
                // MainScene.ins.GameNode.getChildByName("mask").getChildByName("prefabNode").destroyAllChildren();
                // MainScene.ins.GameNode.getChildByName("mask").getChildByName("prefabNode").removeAllChildren();

                Common5.getPrefabFromBundlePrefabLayer(Common5.selectGameInfo.bundle, Common5.selectGameInfo.url, Game.ins.node.getChildByName("mask").getChildByName("prefabNode"), (prefab) => {
                    // prefab.width = Game.ins.maskNode.width;
                    // prefab.height = Game.ins.maskNode.width;
                    // if (Common5.selectGameNum != 0){                        
                    //     User.setFirstIn(false);
                    // }

                    if (Common5.selectGameInfo.isTer) {
                        PrefabManage.loadPrefabByType(GameType.WZ_TerrTip)
                        // Common5.getPrefabFromBundle("ZoomGame","prefab/view/TerrTip");
                    }
                    User.setLeveNum_custom(Common5.selectGameNum);
                    // prefab.scale = Game.ins.maskNode.width/prefab.width;
                    // prefab.setPosition(0,0);
                    // console.log("prefab.width",prefab.width,prefab.height,prefab.position,MainScene.ins.GameNode.getChildByName("mask").getChildByName("prefabNode").position)
                    // Common5.hideTips_custom();
                    Game.ins.reset();
                    // MainScene.ins.isLoading = false;
                })
            });
        }
    }

    // update (dt) {}
}