import NumberToImage from "./NumberToImage";


const { ccclass, property, requireComponent } = cc._decorator;

@ccclass
export default class Reward extends cc.Component {


    @property(cc.Prefab)
    rewardNode: cc.Prefab = null;
    actionOver: boolean;
    speedTime: number = 50;
    private originalTimeScale: number = 1; // 记录原始时间缩放比例
    callBack: Function;


    onLoad() {
        // 为节点添加点击事件监听器
        this.speedTime = 50;
    }

    start() {
        // ... 已有代码 ...
        this.node.on(cc.Node.EventType.TOUCH_END, this.onNodeClick, this);

    }

    /**
     * 节点点击事件处理函数
     */
    onNodeClick() {
        // console.log('Reward 节点被点击了', this.actionOver);
        // 这里可以添加点击后的具体逻辑
        if (this.actionOver == true) {
            if (this.callBack != null) {
                this.callBack();
            }
            this.node.destroy();
        }
        else {
            // 游戏整体加速
            // this.speedUpGame();
        }
    }


    speedUpGame() {
        this.speedTime = 0;
        this.originalTimeScale = cc.director.getScheduler().getTimeScale(); // 记录原始时间缩放比例
        cc.director.getScheduler().setTimeScale(10); // 加速到 2 倍速
        // 在奖励节点创建完成后恢复正常速度
        const checkCompletion = () => {
            if (this.actionOver) {
                cc.director.getScheduler().setTimeScale(this.originalTimeScale); // 恢复原始时间缩放比例
            } else {
                setTimeout(checkCompletion, 50); // 每隔 100 毫秒检查一次
            }
        };
        checkCompletion();
    }

    /**
     * 初始化
     * @param data 数据 
     */
    init(data, callBack?: Function) {
        this.actionOver = false;
        if (callBack) this.callBack = callBack;
        else this.callBack = null;
        if (!data) {
            this.actionOver = true;
            this.node.destroy();
            return;
        }
        const num = Math.min(data.length, 9); // 确保 num 不超过 9
        const spacing = 10; // 间隔，默认 10
        if (this.rewardNode && num > 0) {
            // 获取单个 rewardNode 的宽度和高度
            const tempNode = cc.instantiate(this.rewardNode);
            const nodeWidth = tempNode.width;
            const nodeHeight = tempNode.height;
            tempNode.destroy();

            // 定义每一行的节点数量
            const rowCounts: number[] = [];
            if (num <= 3) {
                rowCounts.push(num);
            } else if (num === 4) {
                rowCounts.push(2, 2);
            } else if (num === 5) {
                rowCounts.push(3, 2);
            } else if (num === 6) {
                rowCounts.push(3, 3);
            } else if (num === 7) {
                rowCounts.push(3, 3, 1);
            } else if (num === 8) {
                rowCounts.push(3, 3, 2);
            } else if (num === 9) {
                rowCounts.push(3, 3, 3);
            }

            // 计算总高度
            const rows = rowCounts.length;
            const totalHeight = (nodeHeight * rows) + (spacing * (rows - 1));

            // 计算起始位置的 y 坐标
            const startY = totalHeight / 2 - nodeHeight / 2;

            let index = 0;
            const createNodeWithDelay = (row: number, col: number) => {
                setTimeout(() => {
                    const rewardNode = cc.instantiate(this.rewardNode);
                    if (this.node) rewardNode.parent = this.node;
                    // 计算当前行的总宽度
                    // let startX = 0;
                    // if (row === 0) {
                    //     const totalWidth = (nodeWidth * rowCounts[row]) + (spacing * (rowCounts[row] - 1));
                    //     startX = -totalWidth / 2 + nodeWidth / 2;
                    // } else {
                    //     startX = -((nodeWidth * 3) + (spacing * 2)) / 2 + nodeWidth / 2;
                    // }
                    // 修复：统一使用当前行的节点数量计算起始位置
                    const totalWidth = (nodeWidth * rowCounts[row]) + (spacing * (rowCounts[row] - 1));
                    const startX = -totalWidth / 2 + nodeWidth / 2;

                    // 计算每个节点的 x 和 y 位置
                    const xPos = startX + (col * (nodeWidth + spacing));
                    const yPos = startY - (row * (nodeHeight + spacing));
                    rewardNode.setPosition(xPos, yPos);
                    // 查找 rewardNode 的子节点 icon
                    const iconNode = rewardNode.getChildByName('icon');
                    iconNode.getChildByName(data[index].type).active = true;
                    let label = rewardNode.getChildByName('label')
                    if (data[index].type == 'coin')
                        NumberToImage.numberToImageNodes(data[index].count, 45, 5, "coins", label, true);
                    else if (data[index].type == 'infinite_health') {
                        NumberToImage.getTimeMargin2(data[index].count, 45, "coins", label, true);
                        if (data[index].count > 3600) label.x -= 10;
                        rewardNode.getChildByName('xnode').opacity = 1;
                    }
                    else {
                        NumberToImage.numberToImageNodes(data[index].count, 50, 15, "coins", label, true);
                        rewardNode.getChildByName('xnode').opacity = 0;
                        label.x += 20;
                    }
                    rewardNode.getChildByName('label').active = false;
                    if (iconNode) {
                        cc.tween(iconNode)
                            .to(0.2, { scale: 1.1 })
                            .to(0.1, { scale: 0.9 })
                            .to(0.05, { scale: 1 })
                            .delay(0.1)
                            .call(() => {
                                rewardNode.getChildByName('label').active = true;
                                if (rewardNode.getChildByName('xnode').opacity == 1) {
                                    rewardNode.getChildByName('xnode').opacity = 0;
                                    let name = "icon1";
                                    if (rewardNode.getChildByName('label').children.length > 4) name = "icon2";
                                    iconNode.getChildByName('infinite_health').getChildByName(name).active = true;
                                }
                                else if (rewardNode.getChildByName('xnode').opacity != 255) {
                                    rewardNode.getChildByName('xnode').active = true;
                                    rewardNode.getChildByName('xnode').opacity = 255;
                                }
                            })
                            .start();
                    }

                    index++;
                    if (index == data.length) {
                        setTimeout(() => {
                            this.actionOver = true;
                        }, 500);

                    }
                    if (index < data.length) {
                        const nextCol = col + 1;
                        if (nextCol < rowCounts[row]) {
                            createNodeWithDelay(row, nextCol);
                        } else {
                            createNodeWithDelay(row + 1, 0);
                        }
                    }
                }, index * this.speedTime); // 每个节点间隔 0.1 秒
            };
            createNodeWithDelay(0, 0);
        }
    }



}
