/************************************************************************************

 * FileName    : UISeason.ts
 * Description :
 * Version     : v1.0.0
 * CreateTime  : 2024-12-30 17:02:47
 * Author      :
 * Copyright (c) 2024
 * ==============================================================
 * Method Description:
 *
 * ==============================================================
 ************************************************************************************/
import {GameUILayers} from "db://assets/scripts/GameUILayers";
import {tgx_class} from "db://assets/core_tgx/base/ModuleContext";
import {ModuleDef} from "db://assets/scripts/ModuleDef";
import {tgxAudioMgr, tgxUIController, tgxUIMgr} from "db://assets/core_tgx/tgx";
import {Layout_UISeason} from "db://assets/module_arean/ui_season/Layout_UISeason";
import {EMusicDefine} from "db://assets/module_basic/scripts/MusicDefine";
import {UserMgr} from "db://assets/module_basic/scripts/UserMgr";
import {CommonFun} from "db://assets/module_arean/scripts/CommonFun";
import {areanMgr} from "db://assets/module_arean/scripts/AreanManager";
import {resLoader} from "db://assets/core_tgx/base/utils/ResLoader";
import {instantiate, SpriteFrame, Node, Prefab, v3, sp, Label } from "cc";
import {UIDan} from "db://assets/module_arean/ui_dan/UIDan";
import {NetGameServer} from "db://assets/module_basic/scripts/NetGameServer";
@tgx_class(ModuleDef.Arean)
export class UISeason  extends tgxUIController{
    constructor() {
        super("ui_season/ui_season", GameUILayers.POPUP,Layout_UISeason)
    }

    protected async onCreated(params: any) {
        let layout: Layout_UISeason = this.layout as Layout_UISeason;
        console.log("当前的赛季信息 === ", UserMgr.inst.userInfo.seasonInfo);
        // 关闭界面
        this.onButtonEvent(layout.closeBtn, () => {
            tgxAudioMgr.inst.playCommonBtn(EMusicDefine.EFFECT_CLOSE);
            this.close();
        })
        // 段位界面
        this.onButtonEvent(layout.danBtn, () => {
            tgxAudioMgr.inst.playCommonBtn(EMusicDefine.EFFECT_OPEN);
            tgxUIMgr.inst.showUI(UIDan);
        })

        await this._initTotalData();
        this._initList();
    }

    /** 顶部数据 */
    private async _initTotalData(): Promise<void> {
        let layout: Layout_UISeason = this.layout as Layout_UISeason;
        let seasonData = await NetGameServer.inst.callApi("arean/season/AreanSeasonInfo", {});
        console.log("获取到的赛季信息 == ",seasonData);
        UserMgr.inst.userInfo.seasonInfo = seasonData.res.data;
        let seasonInfo = UserMgr.inst.userInfo.seasonInfo;
        layout.seasonName.string = `S${seasonInfo.season} 赛季主题`;
        layout.totalCount.string = `${seasonInfo.totalGames}`;
        layout.winCount.string = `${seasonInfo.wins}`;
        layout.topFourCount.string = `${seasonInfo.topFour}`;

        let curDanInfo = CommonFun.getInstance().calDanData(UserMgr.inst.userInfo.danGrading);
        let data = areanMgr.cfgMgr.DanData.getData(curDanInfo.curDan);
        layout.danName.string = `${data.danName}`;
        let sp: SpriteFrame = resLoader.getSpriteFrame('res/danIcon/dan_' + data.mainDan, ModuleDef.Arean);
        if (sp) layout.danIcon.spriteFrame = sp;
    }

    /** 列表数据 */
    private _initList() : void{
        let layout : Layout_UISeason = this.layout as Layout_UISeason;
        let heroList = UserMgr.inst.userInfo.seasonInfo.heroStats;
        let len = heroList.length;
        for(let i = 0; i < len; i++){
            let item = instantiate(layout.cell);
            item.active = true;
            this._initCell(item,heroList[i]);
            item.parent = layout.content;
        }
    }

    private _initCell(node : Node,data) : void{

        let localHeroData = areanMgr.cfgMgr.HeroDatas.getAllDataMap();
        let curHeroData = localHeroData.get(data.heroId);

        if(curHeroData){
            let skin = curHeroData.skinRes[0];
            let skinId = areanMgr.cfgMgr.SkinData.getData(skin).icon
            resLoader.load<Prefab>(ModuleDef.Arean,`res/Prefebs/heroSpine/${skinId}`,(err: Error, prefab: Prefab) => {
                if(err){
                    console.error(err);
                    return;
                }else {
                    let spineNode = instantiate(prefab);
                    node.getChildByName("icon").destroyAllChildren();
                    node.getChildByName("icon").addChild(spineNode);
                    spineNode.scale = v3(0.8,0.8,1);
                    spineNode.position = v3(0,-60,0);
                    // spineNode.getComponent(sp.Skeleton).animation = null;
                }
            })
            node.getChildByName("heroName").getComponent(Label).string = curHeroData.name;
        }else {
            console.error(`${UserMgr.inst.userInfo.heroId}英雄数据不存在`);
        }
        let dataNode = node.getChildByName("dataNode");
        dataNode.getChildByName("lab_1").getComponent(Label).string = data.gamesPlayed + "场";
        let value = Math.trunc(this.divideAndFormat(data.wins,data.gamesPlayed) * 100);
        dataNode.getChildByName("lab_2").getComponent(Label).string = "夺冠率:" + value + "%";
        value = Math.trunc(this.divideAndFormat(data.topFour,data.gamesPlayed) * 100);
        dataNode.getChildByName("lab_3").getComponent(Label).string = "前四率:" + value + "%";
    }

    private divideAndFormat(dividend: number, divisor: number): number {
        const result = dividend / divisor;
        if (result % 1 !== 0) {
            return parseFloat((Math.round(result * 100) / 100).toFixed(2));
        } else {
            return Math.trunc(result);
        }
    }
}