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

 * FileName    : UIChooseHeadLayer.ts
 * Description :
 * Version     : v1.0.0
 * CreateTime  : 2025-01-02 10:42:19
 * Author      :
 * Copyright (c) 2025
 * ==============================================================
 * 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, tgxUITipsBar} from "db://assets/core_tgx/tgx";
import {Layout_UIChooseHeadLayer} from "db://assets/module_arean/ui_player_info/Layout_UIChooseHeadLayer";
import {EMusicDefine} from "db://assets/module_basic/scripts/MusicDefine";
import { Toggle, Node, instantiate, Input, EventTouch, SpriteFrame, Sprite, assetManager, director } from "cc";
import {UserMgr} from "db://assets/module_basic/scripts/UserMgr";
import {areanMgr} from "db://assets/module_arean/scripts/AreanManager";
import {IHeadCfg} from "db://assets/module_basic/shared/configs/interface/IHeadCfg";
import {IHeadFrameCfg} from "db://assets/module_basic/shared/configs/interface/IHeadFrameCfg";
@tgx_class(ModuleDef.Arean)
export class UIChooseHeadLayer  extends tgxUIController{
    private _conditionNodes: Map<number, Node> = new Map<number, Node>();
    private _curChooseType : number = 1; //1:头像,2:头像框
    private _curChooseIndex : number = 0;
    constructor() {
        super("ui_player_info/chooseHeadLayer", GameUILayers.POPUP,Layout_UIChooseHeadLayer);
    }

    protected onCreated(params: any) {
        let layout : Layout_UIChooseHeadLayer = this.layout as Layout_UIChooseHeadLayer;
        this.onButtonEvent(layout.sureBtn, () => {
            tgxAudioMgr.inst.playCommonBtn(EMusicDefine.EFFECT_CLICK);
            this._changeHeadOrFrame();
        })
        for (let i: number = 1; i < 3; i++) {
            let toggle: Toggle = layout.group.getChildByName(`Toggle${i}`).getComponent(Toggle);
            let attr: { tag: number } = {
                tag: i
            }
            toggle.node.attr(attr);
            this._conditionNodes.set(i, toggle.node);
            toggle.node.on('toggle', (target: Toggle) => {
                tgxAudioMgr.inst.playCommonBtn(EMusicDefine.EFFECT_CLICK);
                //@ts-ignore
                this._changeHeroToggleChecked(target.node.tag)
            }, this);
        }
        this._updateList();
    }

    /** 替换头像或者头像框 */
    private _changeHeadOrFrame() {
        let isHave = UserMgr.inst.userInfo.itemList.find((item)=>item.itemId == this._curChooseIndex);
        if(!isHave) {
            tgxUITipsBar.show("暂未拥有");
            return;
        }
        if(this._curChooseType === 1) {
            if(this._curChooseIndex === UserMgr.inst.userInfo.visualId) {
                tgxUITipsBar.show("更换成功");
                this.close();
                return;
            }
        }
        if(this._curChooseType === 2) {
            if(this._curChooseIndex === UserMgr.inst.userInfo.frameIcon) {
                tgxUITipsBar.show("更换成功");
                this.close();
                return;
            }
        }
        let headId = this._curChooseType === 1 ? this._curChooseIndex : UserMgr.inst.userInfo.visualId;
        let frameId = this._curChooseType === 2 ? this._curChooseIndex : UserMgr.inst.userInfo.frameIcon;
        UserMgr.inst.rpc_update_head_frame(headId,frameId).then((ret)=>{
            console.log("替换头像或者头像框",ret);
            if(ret.isSucc) {
                this._updateHeadOrFrameResult();
            }
        })
    }

    private _updateHeadOrFrameResult() : void {
        if(this._curChooseType === 1) {
            UserMgr.inst.userInfo.visualId = this._curChooseIndex;
        }else{
            UserMgr.inst.userInfo.frameIcon = this._curChooseIndex;
        }
        tgxUITipsBar.show("更换成功");
        director.emit("AreanEvent.UpdateHeadOrFrame");
        this.close();
    }

    /** 刷新状态 */
    private _changeHeroToggleChecked(uiName: number) {
        this._conditionNodes.forEach((node : Node,_name : number)=>{
            let choose : Node = node.getChildByName("Checkmark");
            choose.active = _name === uiName;
        })
        if(this._curChooseType === uiName) return;
        this._curChooseType = uiName;
        this._curChooseIndex = null;
        this._updateList();
    }

    private _updateList() {
        let layout : Layout_UIChooseHeadLayer = this.layout as Layout_UIChooseHeadLayer;
        layout.content.destroyAllChildren();
        let headList = areanMgr.cfgMgr.HeadData.getAllData();
        let frameList = areanMgr.cfgMgr.HeadFrameData.getAllData();
        let arr = this._curChooseType === 1 ? headList : frameList;
        let len = arr.length;
        for (let i = 1; i <= len; i++) {
            let data = arr[i - 1];
            let node = instantiate(layout.cell);
            node.active = true;
            layout.content.addChild(node);
            this._initCellData(node,data);
        }
    }

    private _resetChooseState() : void{
        let layout : Layout_UIChooseHeadLayer = this.layout as Layout_UIChooseHeadLayer;
        let child = layout.content.children;
        for (let i = 0; i < child.length; i++) {
            let c = child[i];
            let choose = c.getChildByName("choose");
            if(choose) choose.active = false;
        }
    }

    // 单个cell数据
    private _initCellData(node : Node,data : IHeadCfg | IHeadFrameCfg) : void {
        let icon = node.getChildByName("icon");
        let bundle = assetManager.getBundle(ModuleDef.BASIC);
        bundle.load('icons/' + data.icon + "/spriteFrame", (err, sp: SpriteFrame) => {
            if(sp) icon.getComponent(Sprite).spriteFrame = sp;
        });
        let atrr = {
            tag : data.id,
        }
        let isHave = UserMgr.inst.userInfo.itemList.find((item)=>item.itemId == data.id);
        let mask = node.getChildByName("mask");
        mask.active = isHave === null || isHave === undefined;
        let choose = node.getChildByName("choose");
        if(this._curChooseType === 1){
            choose.active = data.id === UserMgr.inst.userInfo.visualId;
            this._curChooseIndex = UserMgr.inst.userInfo.visualId;
        }else{
            choose.active = data.id === UserMgr.inst.userInfo.frameIcon;
            this._curChooseIndex = UserMgr.inst.userInfo.frameIcon;
        }
        node.attr(atrr);
        node.on(Input.EventType.TOUCH_END,(event: EventTouch)=>{
            tgxAudioMgr.inst.playCommonBtn(EMusicDefine.EFFECT_CLICK);
            let index = event.currentTarget.tag;
            this._curChooseIndex = index;
            this._resetChooseState();
            event.currentTarget.getChildByName("choose").active = true;
            console.log("点击选择的index === ",index)
        },this)
    }
}