import Utils from "./module/Pay/Utils";
import { MiniGameSdk } from "./Sdk/MiniGameSdk";

const { ccclass, property } = cc._decorator;

@ccclass
export default class Message extends cc.Component {

    @property(cc.Label)
    selectLabel: cc.Label = null;

    @property(cc.Label)
    jushiLabel: cc.Label = null;

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

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

    @property(cc.Prefab)
    contentNode: cc.Prefab = null;

    @property(cc.Prefab)
    optionNode: cc.Prefab = null;

    @property(cc.Prefab)
    menuLabel: cc.Prefab = null;

    @property(cc.Prefab)
    likeComment: cc.Prefab = null;

    private comment: any[] = [];
    private jushiList: any = null;

    private currentJushi: any = null;
    private currentOption: any = null;

    // 存储所有内容节点的数组
    private contentNodes: cc.Node[] = [];

    private selectIndex: number = -1;
    private recordMenu: any = null;

    // 存储每列的值，key是列索引(0,1,2...)
    private columnValues: Map<number, string> = new Map();

    // 保存原始模板
    private originalTemplate: string = '';

    // 记录占位符总数
    private placeholderCount: number = 0;

    private _pos: number = 1;
    private marqueeScheduler: any = null; // 添加此行来声明变量

    protected onLoad(): void {

    }

    start() {
        // 开始调度跑马灯更新
        this.schedule(this.updateMarquee, 10); // 每10秒执行一次
    }
    showNode(nodeType: any, pos: number) {
        this.node.getChildByName("commentNode").active = false;
        this._pos = pos;
        if (nodeType == "commentNode") {
            this.node.getChildByName("commentNode").active = true;
            console.log("nodeType", nodeType);
            this.onShowComment();
        }
        else {
            // this.onShowLevelWord();
        }
    }

    onShowComment() {
        // const passCheckJson = cc.fx.GameConfig.PASS_CHECK;
        const message = cc.fx.GameConfig.MESSAGE_MODEL;
        // 解析JSON数据并赋值给comment
        // const jsonData = jsonAsset.json;
        console.log("解析后的JSON数据:", message);
        // 遍历jsonData的所有键
        for (const key in message) {
            if (Array.isArray(message[key])) {
                if (key === "模板") {
                    // 将"模板"键的数据赋值给this.jushiList
                    // this.jushiList = jsonData[key];
                    this.jushiList = {
                        keyName: key,  // 使用键名作为标识
                        data: message[key]  // 保存对应的数据
                    };
                } else {
                    // 将其他键的数据添加到this.comment中
                    this.comment.push({
                        keyName: key,  // 使用键名作为标识
                        data: message[key]  // 保存对应的数据
                    });

                }
            }
        }

        this.onCreateJushi();

        console.log("this.jushiList", this.jushiList);

        console.log("this.comment", this.comment);
        // });

    }

    onCreateJushi() {
        // 创建contentNode节点
        this.currentJushi = cc.instantiate(this.contentNode);
        this.node2.addChild(this.currentJushi);
        this.currentJushi.active = false;

        let contentBg = this.currentJushi.getChildByName("contentBg");
        const contentHeight = this.jushiList.data.length * 60 + 20;
        contentBg.setContentSize(768, contentHeight);

        // 获取contentNode上的脚本组件
        const contentScript = this.currentJushi.getComponent('MessageContent');

        // 定义回调函数
        const callback = (index: number, data: any) => {
            // 处理回调逻辑
            console.log("回调数据:", index, data);
            // this.selectLabel.string = data.context;
            // this.onJushiClick(index, data);

            // this.node3.active = true;

            if (data && data.context) {
                // 保存原始模板
                this.originalTemplate = data.context;

                // 统计占位符数量
                const matches = data.context.match(/\{0\}/g);
                this.placeholderCount = matches ? matches.length : 0;

                let updatedText = data.context;
                for (let i = 0; i < this.placeholderCount; i++) {
                    console.log("数据显示", i);
                }

                this.selectLabel.string = data.context;
                // 创建对应数量的creatorOptionNodes
                this.createJushiOptionNodes(this.placeholderCount);
            }
            this.onJushiClick(index, data);
        };

        if (contentScript) {
            // 设置数据
            contentScript.setContentData(this.jushiList.data, callback);
        }

        // 创建optionNode节点
        // this.createOptionNodes();

    }

    createJushiOptionNodes(placeholderCount: number) {
        // 清除现有的jushi选项节点
        this.node3.removeAllChildren();
        this.contentNodes = []; // 同时清空内容节点数组
        this.selectIndex = -1; // 重置选择索引
        this.recordMenu = null; // 重置记录的菜单
        this.node3.active = true;

        // 重置占位符值映射
        this.columnValues.clear();

        // 重置原始模板和占位符数量
        this.placeholderCount = placeholderCount;

        // 初始化占位符值数组
        for (let i = 0; i < placeholderCount; i++) {
            // 创建基础的选项节点
            this.createOptionNodes(i);
        }
    }

    // 创建optionNode节点
    createOptionNodes(index: number) {
        // 定义节点尺寸和间距
        const itemWidth = 240; // 节点宽度
        const itemHeight = 98; // 节点高度
        const spacingX = 20; // X轴间距
        const spacingY = 22; // Y轴间距 (120 - 98)

        let node = new cc.Node();
        // node.name = `placeholder_${index}`;
        node.groupIndex = index;
        this.node3.addChild(node, this.placeholderCount - index);

        // 为不同组的选项设置不同的Y位置，但确保都在可见区域内
        node.setPosition(0, -index * 300); // 使用固定的间距来避免位置计算错误
        console.log("创建选项节点", index, -index * 260, node.position);
        // 遍历this.comment数组，创建相应数量的optionNode
        for (let i = 0; i < this.comment.length; i++) {
            const optionNode = cc.instantiate(this.optionNode);
            // this.node3.addChild(optionNode, this.comment.length-i);
            node.addChild(optionNode, this.comment.length - i);

            console.log("设置大小", this.node3.getContentSize());
            // 计算位置：每排3个，上下排列
            const row = Math.floor(i / 3); // 行号（0为上排，1为下排，以此类推）
            const col = i % 3; // 列号（0, 1, 2）

            // 设置位置，基于宽240，高98的元素
            // 以node3的锚点(0.5, 1)为参考点，从顶部开始向下排列
            const totalColumnsInRow = Math.min(3, this.comment.length - row * 3); // 当前行的总列数
            // 计算起始X位置，使每行节点居中显示
            const startX = (-(totalColumnsInRow - 1)) * (itemWidth + spacingX) / 2; // 计算起始X位置，使整行居中
            const x = startX + col * (itemWidth + spacingX); // 每个节点间隔为宽度+间距
            // 从顶部开始，依次向下排列（使用负值，因为锚点在顶部）
            const y = -row * (itemHeight + spacingY); // 从上到下分布，每行间距为高度+间距


            optionNode.setPosition(x, y);

            // 获取contentLabel并设置文本为keyName
            const contentLabel = optionNode.getChildByName("contentLabel");
            if (contentLabel) {
                const labelComponent = contentLabel.getComponent(cc.Label);
                if (labelComponent) {
                    labelComponent.string = this.comment[i].keyName;
                }
            }
            const menuBtn = optionNode.getChildByName("menu");
            const background_1 = menuBtn ? menuBtn.getChildByName("background_1") : null;
            const background_2 = menuBtn ? menuBtn.getChildByName("background_2") : null;
            if (background_2) background_2.active = false;

            // 存储选项节点和其背景状态的映射关系
            if (menuBtn) {
                // 使用闭包保存i的值，创建一个唯一的索引
                const optionIndex = index * this.comment.length + i; // 计算全局索引
                menuBtn.on(cc.Node.EventType.TOUCH_END, (event) => {
                    console.log(`this.comment[${i}] = `, this.comment[i]);
                    // 可以在这里添加更多处理逻辑
                    if (background_1) background_1.active = false;
                    if (background_2) background_2.active = true;
                    this.onCreateOption(optionIndex, this.comment[i], menuBtn, index);

                }, this)


                if (this.comment[i].data && Array.isArray(this.comment[i].data)) {
                    // 创建内容节点
                    const contentNode = cc.instantiate(this.contentNode);
                    optionNode.addChild(contentNode);
                    this.contentNodes.push(contentNode);

                    // 设置内容节点的位置（默认隐藏在选项节点下方）
                    contentNode.setPosition(0, -contentNode.height / 2 - 60);
                    contentNode.active = false;

                    // 获取contentBg并设置尺寸
                    let contentBg = contentNode.getChildByName("contentBg");
                    if (contentBg) {
                        const contentHeight = this.comment[i].data.length * 60 + 20;
                        contentBg.setContentSize(268, contentHeight); // 宽默认268，高度根据数据长度计算

                        // 获取contentNode上的脚本组件
                        const contentScript = contentNode.getComponent('MessageContent');

                        // const dataContext = 
                        // 定义回调函数
                        const callback = (num: number, data: any) => {
                            // 处理回调逻辑
                            console.log("内容节点回调数据:", num, data, `来自第${i}个选项`);
                            this.onCreateOption();
                            // this.selectLabel
                            if (this.selectLabel && data && data.context) {
                                // 设置指定列的值
                                this.columnValues.set(index, data.context);

                                // 更新显示
                                this.updateDisplay();

                                // 检查是否所有占位符都已替换
                                let allReplaced = true;
                                for (let j = 0; j < this.placeholderCount; j++) {
                                    if (!this.columnValues.has(j)) {
                                        allReplaced = false;
                                        break;
                                    }
                                }
                                if (allReplaced) {
                                    this.node3.active = false;
                                }

                                // 重置所有选项的背景状态
                                this.resetAllOptionBackgrounds();
                            }
                        };

                        if (contentScript) {
                            // 设置数据
                            contentScript.setContentData(this.comment[i].data, callback);
                        }
                    }

                }
            }

        }

        // 动态调整node3的尺寸以适应所有选项节点
        if (this.comment.length > 0) {
            const totalRows = Math.ceil(this.comment.length / 3);
            const totalColumns = Math.min(3, this.comment.length); // 第一行的列数

            // 计算node3需要的宽度和高度
            const requiredWidth = totalColumns > 1 ? (totalColumns - 1) * spacingX + totalColumns * itemWidth : itemWidth;
            const requiredHeight = (totalRows - 1) * (itemHeight + spacingY) + itemHeight;

            // 设置node3的尺寸，稍微增加一些边距
            this.node3.width = requiredWidth + 20;  // 添加10像素边距
            this.node3.height = requiredHeight + 20; // 添加10像素边距
        }
    }

    // 重置所有选项的背景状态为白色
    resetAllOptionBackgrounds() {
        for (let j = 0; j < this.node3.childrenCount; j++) {
            const groupNode = this.node3.children[j];
            // 遍历组节点的所有子节点（即选项节点）
            for (let k = 0; k < groupNode.childrenCount; k++) {
                const optionNode = groupNode.children[k];
                const menuBtn = optionNode.getChildByName("menu");
                const background_1 = menuBtn ? menuBtn.getChildByName("background_1") : null;
                const background_2 = menuBtn ? menuBtn.getChildByName("background_2") : null;

                if (background_1) background_1.active = true;
                if (background_2) background_2.active = false;
            }
        }
    }

    private updateChildNodeVisibility(selectedIndex: number) {
        if (!this.node3) return;
        console.log("updateChildNodeVisibility", selectedIndex);


        // 如果当前索引小于选中的索引，则隐藏
        // if (i < selectedIndex) {
        //     child.active = false;
        // } else {
        //     // 否则显示
        //     child.active = true;
        // }
        if (selectedIndex === 1) {
            for (let i = 0; i < this.node3.childrenCount; i++) {
                const child = this.node3.children[i];
                if (i === 2) {
                    child.active = false;
                }
            }
        }

        if (selectedIndex === 2) {
            for (let i = 0; i < this.node3.childrenCount; i++) {
                const child = this.node3.children[i];
                if (i > 0) {
                    child.active = false;
                }
            }
        }
    }
    onCreateOption(index?: number, data?: any, clickedMenuBtn?: cc.Node, optionIndex?: number) {
        // 计算node3的位置，使用固定的y值

        if (optionIndex !== undefined && optionIndex >= 0) {
            // 根据点击的索引设置node3的固定y位置
            let targetY = 0;
            switch (optionIndex) {
                case 0:
                    targetY = 0;
                    break;
                case 1:
                    targetY = 300;
                    break;
                case 2:
                    targetY = 600;
                    break;
                default:
                    targetY = optionIndex * 300;
                    break;
            }
            console.log("node3的y位置:", optionIndex);
            if (this.node3) {
                this.node3.y = 218 + targetY;
                if (optionIndex !== 0) {
                    this.updateChildNodeVisibility(optionIndex);
                }
            }
        } else {
            // 如果没有有效索引（即关闭所有子节点），则设置为默认位置（index为0的位置）
            if (this.node3) {
                this.node3.y = 218; // 回到index为0的位置

                for (let i = 0; i < this.node3.childrenCount; i++) {
                    const child = this.node3.children[i];
                    child.active = true;
                }
            }
        }

        if (this.selectIndex !== -1) {
            this.recordMenu.getChildByName("menu");
            this.recordMenu.getChildByName("background_1").active = true;
            this.recordMenu.getChildByName("background_2").active = false;
        }
        if (index === undefined || index < 0) {
            // 如果没有提供有效索引，隐藏所有内容节点
            for (let i = 0; i < this.contentNodes.length; i++) {
                if (this.contentNodes[i]) {
                    this.contentNodes[i].active = false;
                }
            }
            // 重置选择索引
            this.selectIndex = -1;
            if (this.node3) {
                this.node3.y = 218;
                for (let i = 0; i < this.node3.childrenCount; i++) {
                    const child = this.node3.children[i];
                    child.active = true;
                }
            }
            return;
        }

        // 检查索引是否在有效范围内
        if (index >= this.contentNodes.length) {
            console.log("无效索引");
            return;
        }

        // 检查是否与上次点击的是同一个选项
        if (this.selectIndex === index) {
            // 如果是同一个选项，则隐藏对应的内容节点
            if (this.contentNodes[index]) {
                this.contentNodes[index].active = false;
            }
            this.selectIndex = -1;
            if (this.node3) {
                this.node3.y = 218;
            }
        } else {
            // 隐藏所有内容节点
            for (let i = 0; i < this.contentNodes.length; i++) {
                if (this.contentNodes[i]) {
                    this.contentNodes[i].active = false;
                }
            }
            // 显示当前点击的内容节点
            if (this.contentNodes[index]) {
                this.contentNodes[index].active = true;
            }
            // 更新选择索引为当前索引
            this.selectIndex = index;
            this.recordMenu = clickedMenuBtn;
        }
    }

    onJushiClick(event, customData) {
        if (this.currentJushi) {
            if (this.currentJushi.active) {
                this.currentJushi.active = false;
            } else {
                this.currentJushi.active = true;
            }
        }

    }

    onCloseClick(event, customData) {
        console.log("onCloseClick", event, customData);
        this.node.destroy();
    }

    onUpClick(event, customData) {
        console.log("onUpClick", event, customData);

        // 获取当前玩家的名称、头像和当前关卡等级
        const playerName = cc.fx.GameConfig.GM_INFO.username;
        let playerAvatar = cc.fx.GameConfig.GM_INFO.useravatar;
        if (cc.fx.GameConfig.GM_INFO.useravatarIcon.length > 10) {
            console.log("获取头像链接:", cc.fx.GameConfig.GM_INFO.useravatarIcon);
            playerAvatar = cc.fx.GameConfig.GM_INFO.useravatarIcon;
        }
        const currentLevel = cc.fx.GameConfig.GM_INFO.level;

        // 获取留言内容
        const messageContent = this.selectLabel.string; // 使用当前显示的消息内容
        let data = {
            name: playerName,
            head: playerAvatar,
            content: messageContent,
        };

        // 输出信息到控制台
        console.log("玩家名称:", playerName);
        console.log("玩家头像:", playerAvatar);
        console.log("当前关卡等级:", currentLevel);
        console.log("留言内容:", messageContent);
        console.log("lick 0"); // 按照要求添加
        Utils.setCommentInfo((res) => {
            if (res.code == 1) {
                // cc.fx.GameTool.shushu_Track("comment", data);
                // cc.fx.GameTool.typingAni(this.selectLabel, messageContent, () => {
                //     this.onCloseClick(null, null);
                // }, this.node);
                console.log("留言成功", res.msg);
                MiniGameSdk.API.showToast(res.msg);
            }
        }, data, this._pos)
        // 删除当前节点
        // this.node.destroy();
    }
    updateDisplay() {
        if (this.selectLabel) {
            this.selectLabel.string = this.getFinalResult();
        }
    }
    getFinalResult(): string {
        if (!this.originalTemplate) {
            return '';
        }

        let result = this.originalTemplate;
        let matchIndex = 0;

        result = result.replace(/\{0\}/g, () => {
            // 如果该位置有设置的值，就用设置的值
            if (this.columnValues.has(matchIndex)) {
                matchIndex++;
                return this.columnValues.get(matchIndex - 1);
            }
            // 否则保持占位符
            matchIndex++;
            return "{0}";
        });

        return result;
    }
    setColumnValue(columnIndex: number, value: string) {
        if (columnIndex < 0 || columnIndex >= this.placeholderCount) {
            cc.warn("列索引超出范围:", columnIndex);
            return;
        }
        this.columnValues.set(columnIndex, value);
        this.updateDisplay(); // 实时更新显示
    }
    // 清除指定列的值
    clearColumnValue(columnIndex: number) {
        this.columnValues.delete(columnIndex);
        this.updateDisplay();
    }

    onGetCommentInfo() {
        // 获取评论信息并启动跑马灯显示

        let commentData = [{
            content: "首先，方块吧",
            head: "https://thirdwx.qlogo.cn/mmopen/vi_32/oCAezhMhThqmsb7ovGhC4ZDU7QoBCYqbLlAJqOofpzkCSOzqmzlXVqVc87ib1Oo9f6HOgbFLSJq83AIefT0M7xTkaE3Jb0kaFKRlYkhJol6M/132",
            index: 0,
            like: 2310,
            name: "卡越来越",
            uid: "68d0edf0cc79706182bda53f"
        }, {
            content: "首先，2*2方块吧",
            head: "https://thirdwx.qlogo.cn/mmopen/vi_32/oCAezhMhThqmsb7ovGhC4ZDU7QoBCYqbLlAJqOofpzkCSOzqmzlXVqVc87ib1Oo9f6HOgbFLSJq83AIefT0M7xTkaE3Jb0kaFKRlYkhJol6M/132",
            index: 0,
            like: 110,
            name: "卡越来越",
            uid: "68d0edf0cc79706182bda53f"
        }, {
            content: "首先，1x3方块吧",
            head: "https://thirdwx.qlogo.cn/mmopen/vi_32/oCAezhMhThqmsb7ovGhC4ZDU7QoBCYqbLlAJqOofpzkCSOzqmzlXVqVc87ib1Oo9f6HOgbFLSJq83AIefT0M7xTkaE3Jb0kaFKRlYkhJol6M/132",
            index: 0,
            like: 120,
            name: "卡越来越",
            uid: "68d0edf0cc79706182bda53f"
        }, {
            content: "首先，方块吧",
            head: "https://thirdwx.qlogo.cn/mmopen/vi_32/oCAezhMhThqmsb7ovGhC4ZDU7QoBCYqbLlAJqOofpzkCSOzqmzlXVqVc87ib1Oo9f6HOgbFLSJq83AIefT0M7xTkaE3Jb0kaFKRlYkhJol6M/132",
            index: 0,
            like: 0,
            name: "卡越来越",
            uid: "68d0edf0cc79706182bda53f"
        }, {
            content: "首先，方块吧",
            head: "https://thirdwx.qlogo.cn/mmopen/vi_32/oCAezhMhThqmsb7ovGhC4ZDU7QoBCYqbLlAJqOofpzkCSOzqmzlXVqVc87ib1Oo9f6HOgbFLSJq83AIefT0M7xTkaE3Jb0kaFKRlYkhJol6M/132",
            index: 0,
            like: 0,
            name: "卡越来越",
            uid: "68d0edf0cc79706182bda53f"
        }];
        let res = { code: 1, data: commentData, msg: "成功" }

        // Utils.getLikeInfo((res) => {
        console.log("获取点赞信息", res);

        let comment = res.data;

        const likedDataKey = 'liked_data';
        let likedData = cc.sys.localStorage.getItem(likedDataKey);
        likedData = likedData ? JSON.parse(likedData) : { level: null, pos: null, likedIds: [] };

        console.log("从本地获取点赞信息", likedData);
        // 检查当前关卡等级和pos是否与缓存中的匹配
        const currentLevel = cc.fx.GameConfig.GM_INFO.level;
        const currentPos = this._pos;
        const shouldUseCachedIds = likedData.level === currentLevel && likedData.pos === currentPos;

        // 清除可能存在的旧跑马灯容器
        const oldContainer = this.node.getChildByName("marqueeContainer");
        if (oldContainer) {
            oldContainer.destroy();
        }

        // 创建跑马灯容器
        let marqueeContainer = new cc.Node("marqueeContainer");
        marqueeContainer.parent = this.node;
        // marqueeContainer.setPosition(0, 0); // 初始位置在屏幕右侧外

        let showNum = 3;
        let commentNodes = []; // 存储创建的评论节点数组

        // 创建指定数量的评论节点
        for (let i = 0; i < Math.min(showNum, comment.length); i++) {
            // 实例化评论预制体
            let likeComment = cc.instantiate(this.likeComment);

            // 设置节点名称以便管理
            likeComment.name = "likeComment_" + i;

            // 获取子节点
            let levelNode = likeComment.getChildByName("levelNode");
            let headNode = likeComment.getChildByName("headNode");
            let likeBtn = likeComment.getChildByName("likeBtn");

            if (levelNode && levelNode.getComponent(cc.Label)) {
                // 设置评论内容到levelNode的label
                let labelComponent = levelNode.getComponent(cc.Label);
                labelComponent.string = comment[i].content;

                // 等待一帧以确保label渲染完成，然后计算宽度
                this.scheduleOnce(() => {
                    let labelWidth = labelComponent.node.width;

                    // 根据label长度设置headNode和likeBtn的位置
                    headNode.x = -labelWidth / 2 - 85; // 在label左边-85
                    likeBtn.x = labelWidth / 2 + 85;    // 在label右边+85
                }, 0);
            }

            // 设置点赞相关逻辑
            const currentCommentId = comment[i].index; // 使用index作为唯一标识
            const isAlreadyLiked = shouldUseCachedIds && likedData.likedIds.includes(currentCommentId);

            if (likeBtn) {
                // 移除之前的点击事件监听器，避免重复添加
                likeBtn.off(cc.Node.EventType.TOUCH_END);

                // 查找或创建点赞数显示标签
                let likeLabel = likeBtn.getChildByName("likeLabel");
                if (!likeLabel) {
                    // 创建点赞数显示标签
                    likeLabel = new cc.Node("likeLabel");
                    let labelComponent = likeLabel.addComponent(cc.Label);

                    // 设置标签样式
                    labelComponent.string = comment[i].like.toString();
                    labelComponent.fontSize = 40;
                    labelComponent.lineHeight = 42;
                    labelComponent.horizontalAlign = cc.Label.HorizontalAlign.LEFT;
                    labelComponent.verticalAlign = cc.Label.VerticalAlign.CENTER;

                    // 设置颜色
                    likeLabel.color = cc.Color.WHITE;

                    // 添加到点赞按钮节点
                    likeBtn.addChild(likeLabel);

                    // 设置位置（在点赞按钮旁边）
                    likeLabel.setPosition(30, -10); // 根据实际需求调整位置
                } else {
                    // 如果标签已存在，更新显示的点赞数
                    let labelComponent = likeLabel.getComponent(cc.Label);
                    if (labelComponent) {
                        labelComponent.string = comment[i].like.toString();
                    }
                }

                if (isAlreadyLiked) {
                    // 如果已经点赞过，设置按钮为不可点击状态
                    likeBtn['_hasLiked'] = true;
                    console.log(`节点 ${i + 1} 的likeBtn已点赞过，设置为不可点击状态`);
                } else {
                    // 如果没有点赞过，添加点击事件
                    likeBtn['_hasLiked'] = false;
                    likeBtn.on(cc.Node.EventType.TOUCH_END, (event) => {
                        if (likeBtn['_hasLiked']) {
                            console.log(`节点 ${i + 1} 的likeBtn已经点赞，不可再次点击`);
                            return; // 如果已经点赞，则不执行后续操作
                        }

                        console.log(`调用事件信息: 节点 ${i + 1} 的likeBtn被点击，评论内容: ${comment[i].content}, 用户: ${comment[i].name}`);
                        // 处理点赞逻辑
                        //this.handleLikeClick(i, comment[i], likeLabel, likeBtn, currentCommentId, currentLevel, currentPos);
                    }, this);
                }
                // 设置按钮的ID，以便在后续处理中识别
                likeBtn['_commentId'] = currentCommentId;
            } else {
                console.warn(`节点 ${i + 1} 下未找到名为 likeBtn 的子节点`);
            }

            // 将节点添加到容器中
            marqueeContainer.addChild(likeComment);

            // 计算每个节点的水平间距
            likeComment.x = i * 400; // 假设每个节点宽约400，可根据实际情况调整

            // 存储节点引用
            commentNodes.push(likeComment);
        }

        // 将容器添加到父节点
        marqueeContainer.parent = this.node;

        // // 开始跑马灯动画
        // this.startMarqueeAnimation(marqueeContainer, commentNodes);
        // 保存引用用于后续动画
        this["marqueeContainer"] = marqueeContainer;
        this["commentNodes"] = commentNodes;

        // 立即启动一次跑马灯动画
        this.startSingleMarqueeAnimation();

        // }, this._pos)
    }

    onShowLevelWord() {
        // 现在这个方法只负责触发获取评论信息和显示跑马灯
        // this.onGetCommentInfo();
    }

    // 启动单次跑马灯动画
    startSingleMarqueeAnimation() {
        if (!this["marqueeContainer"] || !this["commentNodes"]) {
            return;
        }

        const container = this["marqueeContainer"];
        const nodes = this["commentNodes"];
        const screenWidth = cc.winSize.width;

        // 设置初始位置，使容器完全在屏幕右侧外
        container.x = screenWidth;

        // 计算容器总宽度
        let totalWidth = 0;
        for (let node of nodes) {
            totalWidth += node.width + 20; // 加上一些间距
        }

        // 执行动画：从右向左移动
        const moveAction = cc.sequence(
            cc.moveBy(15, -screenWidth - totalWidth, 0), // 根据屏幕宽度和内容总宽度计算移动距离
            cc.callFunc(() => {
                // 动画完成后回调，可以重新开始或其他操作
                console.log("跑马灯动画完成");
            })
        );

        // 执行动画
        container.stopAllActions();
        container.runAction(moveAction);
    }
    // 定期更新跑马灯的函数
    updateMarquee(dt: number) {
        this.startSingleMarqueeAnimation();
    }

    // 停止跑马灯动画
    stopMarqueeAnimation() {
        if (this.marqueeScheduler) {
            clearInterval(this.marqueeScheduler);
            this.marqueeScheduler = null;
        }
    }

    // 添加点赞点击处理函数
    // private handleLikeClick(index: number, commentData: any, likeLabel: cc.Node, likeBtn: cc.Node, commentId: number, level: number, pos: number) {
    //     console.log(`点赞按钮被点击，索引: ${index}, 评论数据:`, commentData);
    //     Utils.setLikeInfo((res) => {
    //         if (res.code === 1) {
    //             commentData.like += 1;
    //             let labelComponent = likeLabel.getComponent(cc.Label);
    //             if (labelComponent) {
    //                 labelComponent.string = commentData.like.toString();
    //             }

    //             // 设置按钮为已点赞状态，不可再次点击
    //             likeBtn['_hasLiked'] = true;
    //             likeBtn.off(cc.Node.EventType.TOUCH_END); // 移除点击事件

    //             // 更新本地缓存中的已点赞数据
    //             const likedDataKey = 'liked_data';
    //             let likedData = cc.sys.localStorage.getItem(likedDataKey);
    //             likedData = likedData ? JSON.parse(likedData) : { level: null, pos: null, likedIds: [] };

    //             // 更新关卡等级和pos
    //             likedData.level = level;
    //             likedData.pos = pos;

    //             // 添加当前ID到已点赞列表（如果不存在）
    //             if (!likedData.likedIds.includes(commentId)) {
    //                 likedData.likedIds.push(commentId);
    //             }

    //             // 保存到本地缓存
    //             cc.sys.localStorage.setItem(likedDataKey, JSON.stringify(likedData));

    //             console.log("点赞成功！");
    //         } else {
    //             console.log("点赞失败！");
    //         }
    //     }, this._pos, index);
    // }


    // onShowLevelWord() {

    //     // 展示评论
    //     let likeComment = cc.instantiate(this.likeComment);
    //     let levelWordNode = this.node.getChildByName("levelWordNode");
    //     let showNum = 3;

    //     // 检查是否存在labelContainer节点，如果没有则创建
    //     let labelContainer = levelWordNode.getChildByName("labelContainer");
    //     if (!labelContainer) {
    //         // 如果场景中没有预设的labelContainer节点，则创建一个新的
    //         labelContainer = new cc.Node("labelContainer");
    //         labelContainer.parent = levelWordNode;
    //         labelContainer.zIndex = 100; // 确保label在正确层级
    //     }

    //     let comment = null;
    //     // let commentData = [{
    //     //     content: "首先，方块吧",
    //     //     head: "https://thirdwx.qlogo.cn/mmopen/vi_32/oCAezhMhThqmsb7ovGhC4ZDU7QoBCYqbLlAJqOofpzkCSOzqmzlXVqVc87ib1Oo9f6HOgbFLSJq83AIefT0M7xTkaE3Jb0kaFKRlYkhJol6M/132",
    //     //     index: 0,
    //     //     like: 2310,
    //     //     name: "卡越来越",
    //     //     uid: "68d0edf0cc79706182bda53f"
    //     // }, {
    //     //     content: "首先，2*2方块吧",
    //     //     head: "https://thirdwx.qlogo.cn/mmopen/vi_32/oCAezhMhThqmsb7ovGhC4ZDU7QoBCYqbLlAJqOofpzkCSOzqmzlXVqVc87ib1Oo9f6HOgbFLSJq83AIefT0M7xTkaE3Jb0kaFKRlYkhJol6M/132",
    //     //     index: 0,
    //     //     like: 110,
    //     //     name: "卡越来越",
    //     //     uid: "68d0edf0cc79706182bda53f"
    //     // }, {
    //     //     content: "首先，1x3方块吧",
    //     //     head: "https://thirdwx.qlogo.cn/mmopen/vi_32/oCAezhMhThqmsb7ovGhC4ZDU7QoBCYqbLlAJqOofpzkCSOzqmzlXVqVc87ib1Oo9f6HOgbFLSJq83AIefT0M7xTkaE3Jb0kaFKRlYkhJol6M/132",
    //     //     index: 0,
    //     //     like: 120,
    //     //     name: "卡越来越",
    //     //     uid: "68d0edf0cc79706182bda53f"
    //     // }, {
    //     //     content: "首先，方块吧",
    //     //     head: "https://thirdwx.qlogo.cn/mmopen/vi_32/oCAezhMhThqmsb7ovGhC4ZDU7QoBCYqbLlAJqOofpzkCSOzqmzlXVqVc87ib1Oo9f6HOgbFLSJq83AIefT0M7xTkaE3Jb0kaFKRlYkhJol6M/132",
    //     //     index: 0,
    //     //     like: 0,
    //     //     name: "卡越来越",
    //     //     uid: "68d0edf0cc79706182bda53f"
    //     // }, {
    //     //     content: "首先，方块吧",
    //     //     head: "https://thirdwx.qlogo.cn/mmopen/vi_32/oCAezhMhThqmsb7ovGhC4ZDU7QoBCYqbLlAJqOofpzkCSOzqmzlXVqVc87ib1Oo9f6HOgbFLSJq83AIefT0M7xTkaE3Jb0kaFKRlYkhJol6M/132",
    //     //     index: 0,
    //     //     like: 0,
    //     //     name: "卡越来越",
    //     //     uid: "68d0edf0cc79706182bda53f"
    //     // }];
    //     // let res = { code: 1, data: commentData, msg: "成功" }
    //     Utils.getLikeInfo((res) => {
    //         console.log("获取点赞信息", res);

    //         comment = res.data.comment;

    //         const likedDataKey = 'liked_data';
    //         let likedData = cc.sys.localStorage.getItem(likedDataKey);
    //         likedData = likedData ? JSON.parse(likedData) : { level: null, pos: null, likedIds: [] };

    //         console.log("从本地获取点赞信息", likedData);
    //         // 检查当前关卡等级和pos是否与缓存中的匹配
    //         const currentLevel = cc.fx.GameConfig.GM_INFO.level;
    //         const currentPos = this._pos;
    //         const shouldUseCachedIds = likedData.level === currentLevel && likedData.pos === currentPos;

    //         // comment = res.data;
    //         // if (comment.length <= showNum) {
    //         for (let i = 0; i < comment.length; i++) {
    //             let node = levelWordNode.getChildByName("node" + (i + 1));
    //             console.log("node", node)
    //             // 检查节点是否存在
    //             if (node) {
    //                 node.active = false;
    //                 if (i < showNum) {
    //                     node.active = true;

    //                     // 为每个node添加文本显示，但将Label放在单独的容器中以优化合批
    //                     let labelNode = labelContainer.getChildByName("labelNode" + i);

    //                     // 检查menuLabel是否存在，再实例化
    //                     if (!labelNode && this.menuLabel) {
    //                         labelNode = cc.instantiate(this.menuLabel);
    //                         if (labelNode) {
    //                             labelNode.name = "labelNode" + i;
    //                             labelContainer.addChild(labelNode);
    //                         }
    //                     } else if (!labelNode && !this.menuLabel) {
    //                         console.warn(`menuLabel prefab is not assigned, creating label node directly`);
    //                         // 如果没有预制体，直接创建一个带Label组件的节点
    //                         labelNode = new cc.Node();
    //                         let labelComponent = labelNode.addComponent(cc.Label);

    //                         // 设置统一的字体和样式以优化合批
    //                         // labelComponent.fontSize = 40;
    //                         // labelComponent.lineHeight = 45;
    //                         // labelComponent.enableBold = true;
    //                         labelComponent.horizontalAlign = cc.Label.HorizontalAlign.CENTER;
    //                         labelComponent.verticalAlign = cc.Label.VerticalAlign.CENTER;
    //                         labelComponent.overflow = cc.Label.Overflow.NONE;

    //                         // 重要：设置CHAR模式以优化合批
    //                         labelComponent.cacheMode = cc.Label.CacheMode.CHAR;

    //                         labelNode.name = "labelNode" + i;
    //                         labelContainer.addChild(labelNode);
    //                     }

    //                     // 检查labelNode是否存在再设置属性
    //                     if (labelNode) {
    //                         // 设置label位置与对应的node对齐
    //                         labelNode.active = true;
    //                         // 使用node的世界坐标转换为labelContainer的局部坐标
    //                         labelNode.position = labelContainer.convertToNodeSpaceAR(node.parent.convertToWorldSpaceAR(node.position));

    //                         // 如果需要显示特定文本，可以在这里设置
    //                         let labelComponent = labelNode.getComponent(cc.Label);
    //                         if (labelComponent) {
    //                             // 重要：设置CHAR模式以优化合批
    //                             labelComponent.cacheMode = cc.Label.CacheMode.CHAR;

    //                             // 设置统一的文本内容，如果需要不同内容，请确保使用相同的字体资源
    //                             // labelComponent.string = "文本内容";
    //                             console.log("comment[i].content", comment[i].content);
    //                             labelComponent.string = comment[i].content;

    //                             // 确保所有Label使用相同的字体和样式设置
    //                             // labelComponent.font = null; // 清除可能存在的字体资源引用
    //                             // labelComponent.useSystemFont = true;
    //                             // labelComponent.fontSize = 60;
    //                             // labelComponent.lineHeight = 60;
    //                             // labelComponent.enableBold = true;
    //                             labelComponent.horizontalAlign = cc.Label.HorizontalAlign.CENTER;
    //                             labelComponent.verticalAlign = cc.Label.VerticalAlign.CENTER;
    //                             labelComponent.overflow = cc.Label.Overflow.NONE;
    //                         }
    //                     }

    //                     // 获取当前节点下的likeBtn
    //                     let likeBtn = node.getChildByName("likeBtn");
    //                     if (likeBtn) {
    //                         // 移除之前的点击事件监听器，避免重复添加
    //                         likeBtn.off(cc.Node.EventType.TOUCH_END);
    //                         // 查找或创建点赞数显示标签
    //                         let likeLabel = node.getChildByName("likeLabel");
    //                         if (!likeLabel) {
    //                             // 创建点赞数显示标签
    //                             likeLabel = new cc.Node("likeLabel");
    //                             let labelComponent = likeLabel.addComponent(cc.Label);

    //                             // 设置标签样式
    //                             labelComponent.string = comment[i].like.toString();
    //                             labelComponent.fontSize = 30;
    //                             labelComponent.lineHeight = 32;
    //                             labelComponent.horizontalAlign = cc.Label.HorizontalAlign.LEFT;
    //                             labelComponent.verticalAlign = cc.Label.VerticalAlign.CENTER;

    //                             // 设置颜色
    //                             likeLabel.color = cc.Color.BLACK;
    //                             likeLabel.anchorX = 0;
    //                             likeLabel.anchorY = 0.5;

    //                             // 添加到节点
    //                             node.addChild(likeLabel);

    //                             // 设置位置（通常在likeBtn旁边）
    //                             likeLabel.setPosition(likeBtn.x + likeBtn.width / 2 + 20, likeBtn.y); // 根据实际需求调整位置
    //                         } else {
    //                             // 如果标签已存在，更新显示的点赞数
    //                             let labelComponent = likeLabel.getComponent(cc.Label);
    //                             if (labelComponent) {
    //                                 labelComponent.string = comment[i].like.toString();
    //                             }
    //                         }
    //                         // 检查当前评论ID是否已经在本地缓存的已点赞列表中
    //                         const currentCommentId = comment[i].index; // 使用index作为唯一标识
    //                         const isAlreadyLiked = shouldUseCachedIds && likedData.likedIds.includes(currentCommentId);

    //                         if (isAlreadyLiked) {
    //                             // 如果已经点赞过，设置按钮为不可点击状态
    //                             likeBtn['_hasLiked'] = true;
    //                             console.log(`节点 ${i + 1} 的likeBtn已点赞过，设置为不可点击状态`);
    //                         } else {
    //                             // 如果没有点赞过，添加点击事件
    //                             likeBtn['_hasLiked'] = false;
    //                             likeBtn.on(cc.Node.EventType.TOUCH_END, (event) => {
    //                                 if (likeBtn['_hasLiked']) {
    //                                     console.log(`节点 ${i + 1} 的likeBtn已经点赞，不可再次点击`);
    //                                     return; // 如果已经点赞，则不执行后续操作
    //                                 }

    //                                 console.log(`调用事件信息: 节点 ${i + 1} 的likeBtn被点击，评论内容: ${comment[i].content}, 用户: ${comment[i].name}`);
    //                                 // 这里可以添加点赞逻辑
    //                                 this.handleLikeClick(i, comment[i], likeLabel, likeBtn, currentCommentId, currentLevel, currentPos);
    //                             }, this);
    //                         }
    //                         // 设置按钮的ID，以便在后续处理中识别
    //                         likeBtn['_commentId'] = currentCommentId;
    //                     } else {
    //                         console.warn(`节点 ${i + 1} 下未找到名为 likeBtn 的子节点`);
    //                     }
    //                 } else {
    //                     // 如果节点超出显示范围，隐藏其对应的label
    //                     let labelNode = labelContainer.getChildByName("labelNode" + i);
    //                     if (labelNode) {
    //                         labelNode.active = false;
    //                     }

    //                     // 检查超出范围的节点是否也有likeBtn，也需要处理
    //                     let likeBtn = node.getChildByName("likeBtn");
    //                     if (likeBtn) {
    //                         likeBtn.off(cc.Node.EventType.TOUCH_END); // 移除可能存在的事件监听器
    //                         likeBtn.active = false; // 隐藏超出范围的点赞按钮
    //                     }
    //                 }
    //             } else {
    //                 console.warn(`Node with name "node${i}" not found in levelWordNode`);
    //             }
    //         }
    //         // }

    //     }, this._pos)
    // }

    // 添加点赞点击处理函数

    // private handleLikeClick(index: number, commentData: any, likeLabel: cc.Node, likeBtn: cc.Node, commentId: number, level: number, pos: number) {
    //     console.log(`点赞按钮被点击，索引: ${index}, 评论数据:`, commentData);
    //     Utils.setLikeInfo((res) => {
    //         if (res.code === 1) {
    //             commentData.like += 1;
    //             let labelComponent = likeLabel.getComponent(cc.Label);
    //             if (labelComponent) {
    //                 labelComponent.string = commentData.like.toString();
    //             }

    //             // 设置按钮为已点赞状态，不可再次点击
    //             likeBtn['_hasLiked'] = true;
    //             likeBtn.off(cc.Node.EventType.TOUCH_END); // 移除点击事件

    //             // 更新本地缓存中的已点赞数据
    //             const likedDataKey = 'liked_data';
    //             let likedData = cc.sys.localStorage.getItem(likedDataKey);
    //             likedData = likedData ? JSON.parse(likedData) : { level: null, pos: null, likedIds: [] };

    //             // 更新关卡等级和pos
    //             likedData.level = level;
    //             likedData.pos = pos;

    //             // 添加当前ID到已点赞列表（如果不存在）
    //             if (!likedData.likedIds.includes(commentId)) {
    //                 likedData.likedIds.push(commentId);
    //             }

    //             // 保存到本地缓存
    //             cc.sys.localStorage.setItem(likedDataKey, JSON.stringify(likedData));

    //             console.log("点赞成功！");
    //         } else {
    //             console.log("点赞失败！");
    //         }
    //     }, this._pos, index);
    // }

    // onUpLikeClick(event, customData) {
    //     console.log("onUpClick", event, customData);

    //     // 获取当前玩家的名称、头像和当前关卡等级
    //     const playerName = cc.fx.GameConfig.GM_INFO.username;
    //     const playerAvatar = cc.fx.GameConfig.GM_INFO.useravatar;
    //     const currentLevel = cc.fx.GameConfig.GM_INFO.level;

    //     // 获取留言内容
    //     const messageContent = this.selectLabel.string; // 使用当前显示的消息内容

    //     let likeNum = 0;

    //     let data = {
    //         name: playerName,
    //         head: playerAvatar,
    //         content: messageContent,
    //         like: likeNum,
    //     };
    //     let pos = 1;
    //     let index = 1;
    //     // 输出信息到控制台
    //     // console.log("玩家名称:", playerName);
    //     // console.log("玩家头像:", playerAvatar);
    //     // console.log("当前关卡等级:", currentLevel);
    //     // console.log("留言内容:", messageContent);
    //     // console.log("lick 0"); // 按照要求添加
    //     Utils.setLikeInfo((res) => {
    //         if (res.code == 1) {
    //             // cc.fx.GameTool.shushu_Track("comment", data);
    //             // cc.fx.GameTool.typingAni(this.selectLabel, messageContent, () => {
    //             //     this.onCloseClick(null, null);
    //             // }, this.node);

    //         }
    //     }, pos, index)
    //     // 删除当前节点
    //     // this.node.destroy();
    // }
    // 清除所有
    clearAll() {
        this.columnValues.clear();
        this.updateDisplay();
    }

}