import Utils from "../../Script/module/Pay/Utils";
import List from "../../Script/module/RankList/List";
import NumberToImage from "../../Script/NumberToImage";
import { MiniGameSdk } from "../../Script/Sdk/MiniGameSdk";

const { ccclass, property } = cc._decorator;

@ccclass
export default class NewClass extends cc.Component {
    //商店界面
    @property(cc.Node)
    shop: cc.Node = null;
    //商品列表
    @property(cc.Node)
    itemList: cc.Node = null;

    //金币数量
    @property(cc.Node)
    coin: cc.Node = null;
    //体力信息
    @property(cc.Node)
    Stamina: cc.Node = null;
    btn_Touch: boolean = true;
    private onShowListener: () => void;
    private scheduleCallback: Function = null;
    private currentCoin: number = 0;
    private coinAnimTime: number = 0;
    private coinAnimDuration: number = 1.5; // 1.5秒
    private coinStart: number = 0;
    private coinEnd: number = 0;
    private coinAnimating: boolean = false;
    //飞金币动画
    @property(cc.Node)
    coinAnim: cc.Node = null;
    private buy: boolean = false;

    private iosPrice: number = 0;
    private iosProductId: string = "";
    private iosCount: number = 1;


    onLoad() {
        this.btn_Touch = true;
        // 检测微信小游戏切到后台
        if (cc.sys.platform === cc.sys.WECHAT_GAME) {
            // 定义监听函数
            this.onShowListener = () => {
                this.onShow();
            };
            //@ts-ignore
            wx.onShow(this.onShowListener);

        }
    }
    start() {
        this.btn_Touch = true;
        this.openShop();
        this.setHealthInfo();
    }

    init() {
        this.btn_Touch = true;
    }
    //打开商店界面
    openShop() {
        Utils.outTradeNo = null;
        // 商品数据数组
        const products = [
            { product_id: "gold_1", name: "金币包1", price: 600, coin: 1200, title: "3x2六档金币" },
            { product_id: "gold_2", name: "金币包2", price: 3600, coin: 8000, title: "" },
            { product_id: "gold_3", name: "金币包3", price: 6800, coin: 16000, title: "" },
            { product_id: "gold_4", name: "金币包4", price: 12800, coin: 32000, title: "" },
            { product_id: "gold_5", name: "金币包5", price: 32800, coin: 100000, title: "" },
            { product_id: "gold_6", name: "金币包6", price: 64800, coin: 240000, title: "" },
        ];
        for (let i = 1; i <= 6 && i < this.itemList.children.length; i++) {
            const spriteComp = this.itemList.children[i].children[0].getComponent(cc.Sprite);
            const price = this.itemList.children[i].children[1];
            const title = this.itemList.children[i].children[2];
            const product = products[i - 1];

            if (spriteComp && product) {
                // TODO: 根据 product_id 或 name 设置 spriteComp.spriteFrame
            }


            if (price && product) {
                NumberToImage.numberToImageNodes(product.price / 100, 35, 20, "cost_", price, false)
            }
            if (title && product) {
                NumberToImage.numberToImageNodes(product.coin, 40, 25, "scoin_", title, true)
            }
        }
        NumberToImage.numberToImageNodes(cc.fx.GameConfig.GM_INFO.coin, 30, 15, "coin_", this.coin, true);

    }



    startCoinAnim(target: number) {
        if (this.coinAnimating && this.coinEnd === target) return;
        this.coinStart = this.currentCoin;
        this.coinEnd = target;
        this.coinAnimTime = 0;
        this.coinAnimating = true;
    }
    //优化
    protected update(dt: number): void {
        if (this.coin && this.coinAnimating) {
            this.coinAnimTime += dt;
            let t = this.coinAnimTime / this.coinAnimDuration;
            if (t >= 1) {
                this.currentCoin = this.coinEnd;
                this.coinAnimating = false;
                NumberToImage.numberToImageNodes(this.currentCoin, 30, 15, "coin_", this.coin, true);
            } else {
                this.currentCoin = Math.floor(this.coinStart + (this.coinEnd - this.coinStart) * t);
                NumberToImage.numberToImageNodes(this.currentCoin, 30, 15, "coin_", this.coin, true);
            }
        }
    }

    playCoinAnim(target?: number) {
        this.coinAnim.active = true;
        this.coinAnim.getComponent(sp.Skeleton).setAnimation(0, "feijinbi", false);
        // 监听动画完成事件
        this.coinAnim.getComponent(sp.Skeleton).setCompleteListener(() => {
            // 动画播放完成后销毁节点
            this.coinAnim.active = false;
        });
        this.startCoinAnim(5000);
    }
    //关闭商店界面
    closeShop() {
        // 移除 wx.onShow 监听器
        if (cc.sys.platform === cc.sys.WECHAT_GAME && this.onShowListener) {
            //@ts-ignore
            wx.offShow(this.onShowListener);
        }
        Utils.outTradeNo = null;
        //销毁预制体
        if (this.node.parent.getComponent("JiaZai")) {
            this.node.parent.getComponent("JiaZai").closeShop();
        }
        else if (this.node.parent.getComponent("SceneManager")) {
            this.node.parent.getComponent("SceneManager").closeShop();
        }
        // this.shop.destroy();
    }

    onShow() {
        if (cc.sys.platform === cc.sys.WECHAT_GAME) {
            console.log("从后台进入前台订单号:", cc.fx.GameConfig.GM_INFO.iosOutTradeNo);
            if (cc.fx.GameConfig.GM_INFO.iosOutTradeNo != null && cc.fx.GameConfig.GM_INFO.iosOutTradeNo != "") {
                console.log("有苹果订单号，开始轮训");
                const iosOutTradeNo = cc.fx.GameConfig.GM_INFO.iosOutTradeNo;
                cc.fx.GameConfig.GM_INFO.iosOutTradeNo = "";
                this.openLoad();
                Utils.getIosPayInfo(iosOutTradeNo,
                    (data) => {
                        console.log("获得轮训结果:", data);
                        if (data.code == 1) {
                            console.log("购买成功");
                            const dataSuccess = {
                                outTradeNo: iosOutTradeNo,
                                price: this.iosPrice,
                                payment_name: this.iosProductId,
                                payment_num: this.iosCount,
                                type: "ios",
                            }
                            cc.fx.GameTool.shushu_Track("payment", dataSuccess);
                            let name = "购买金币道具:" + this.iosProductId;
                            MiniGameSdk.API.yinli_Pay(this.iosPrice, iosOutTradeNo, name)
                            Utils.setPayInfo(
                                (res) => {
                                    this.closeLoad();
                                    //console.log("设置轮训结果:", res);
                                    if (res.code === 1) {
                                        console.log("_________正式发货");
                                        MiniGameSdk.API.showToast("充值成功");
                                        cc.fx.GameTool.shopBuy(this.iosProductId);
                                        //console.log("充值成功获得金币");
                                    }
                                    else {
                                        MiniGameSdk.API.showToast("网络异常，充值奖励将在登录后再次发放");
                                        const dataFail4 = {
                                            outTradeNo: iosOutTradeNo,
                                            price: this.iosPrice,
                                            payment_name: this.iosProductId,
                                            payment_num: this.iosCount,
                                            type: "ios",
                                            fail_reason: "成功付款，但是发货时请求服务器失败，充值成功未发货",
                                        }
                                        cc.fx.GameTool.shushu_Track("payment_fail", dataFail4);
                                    }
                                    NumberToImage.numberToImageNodes(cc.fx.GameConfig.GM_INFO.coin, 30, 15, "coin_", this.coin, true);
                                    if (this.node.parent.getComponent("JiaZai"))
                                        this.node.parent.getComponent("JiaZai").updateCoin();
                                    else if (this.node.parent.getComponent("SceneManager")) {
                                        this.node.parent.getComponent("SceneManager").updateCoin();
                                    }
                                }, iosOutTradeNo)
                        }
                        else if (data.code == 0) {
                            console.log("用户自己取消充值");
                            MiniGameSdk.API.showToast("充值失败");
                            this.closeLoad();
                            this.btn_Touch = true;
                            const dataFail = {
                                outTradeNo: iosOutTradeNo,
                                price: this.iosPrice,
                                payment_name: this.iosProductId,
                                payment_num: this.iosCount,
                                type: "ios",
                                fail_reason: "用户取消充值",
                            }
                            cc.fx.GameTool.shushu_Track("payment_fail", dataFail);
                        }
                        else if (data.code == 2) {
                            this.closeLoad();
                            console.log("轮训超时");
                            MiniGameSdk.API.showToast("订单已关闭");
                            const dataFail = {
                                outTradeNo: iosOutTradeNo,
                                price: this.iosPrice,
                                payment_name: this.iosProductId,
                                payment_num: this.iosCount,
                                type: "ios",
                                fail_reason: "用户充值后，轮训结果超时",
                            }
                            cc.fx.GameTool.shushu_Track("payment_fail", dataFail);
                        }

                        this.btn_Touch = true;
                        cc.fx.GameConfig.GM_INFO.iosOutTradeNo = null;
                    })
            }
        }

    }

    openLoad() {
        this.node.getChildByName("Loading").active = true;
        this.node.getChildByName("Loading").getChildByName("load").stopAllActions();
        this.node.getChildByName("Loading").getChildByName("load").runAction(cc.rotateTo(2, 1080).repeatForever());
    }

    closeLoad() {
        this.node.getChildByName("Loading").active = false;
    }

    setHealthInfo() {
        if (cc.fx.GameConfig.GM_INFO.hp >= 5) {
            this.Stamina.getChildByName("man").active = true;
            this.Stamina.getChildByName("health").active = true;
            NumberToImage.numberToImageNodes(cc.fx.GameConfig.GM_INFO.hp, 25, 15, "hp_", this.Stamina.getChildByName("health"), false);
            this.Stamina.getChildByName("time").active = false;
        }
        else {
            this.Stamina.getChildByName("man").active = false;
            this.Stamina.getChildByName("health").active = true;
            NumberToImage.numberToImageNodes(cc.fx.GameConfig.GM_INFO.hp, 25, 15, "hp_", this.Stamina.getChildByName("health"), false);
            this.Stamina.getChildByName("time").active = true;
            if (cc.fx.GameConfig.GM_INFO.min_Time != 0) {
                let time = cc.fx.GameTool.getTimeMargin(cc.fx.GameConfig.GM_INFO.min_Time);
                this.Stamina.getChildByName("time").getComponent(cc.Label).string = time;
                this.startTimeCutDown();
            }
        }
    }

    startTimeCutDown() {
        this.scheduleCallback = function () {
            if (this.pause) return;
            if (cc.fx.GameConfig.GM_INFO.min_Time <= 0) {
                this.stopTimeCutDown();
                var timeTemp = cc.fx.GameTool.getTimeMargin(cc.fx.GameConfig.GM_INFO.min_Time);
                // 同步显示
                if (this.Stamina && this.Stamina.getChildByName("time")) {
                    this.Stamina.getChildByName("time").getComponent(cc.Label).string = timeTemp;
                }
                MiniGameSdk.API.showToast("恢复一点滴点体力");
                cc.fx.GameTool.setUserHealth(1, (data) => {
                    cc.fx.GameTool.getHealth(null);
                    this.setHealthInfo();
                })
            }
            else {
                cc.fx.GameConfig.GM_INFO.min_Time -= 1;
                var timeTemp = cc.fx.GameTool.getTimeMargin(cc.fx.GameConfig.GM_INFO.min_Time);
                // 同步显示
                if (this.Stamina && this.Stamina.getChildByName("time")) {
                    this.Stamina.getChildByName("time").getComponent(cc.Label).string = timeTemp;
                }
            }
        }.bind(this);
        this.schedule(this.scheduleCallback, 1);
    }

    // 停止倒计时
    stopTimeCutDown() {
        if (this.scheduleCallback) {
            this.unschedule(this.scheduleCallback);
        }
    }

    //点击充值购买

    buyProduct(event, customData) {
        if (!this.btn_Touch) {
            return;
        }
        this.btn_Touch = false;
        const productId = customData;
        let id = "10011";
        let price = 100;
        let count = 1;
        id = productId;
        switch (productId) {
            case "gold_1":
                price = 600;
                break;
            case "gold_2":
                price = 3600;
                break;
            case "gold_3":
                price = 6800;
                break;
            case "gold_4":
                price = 12800;
                break;
            case "gold_5":
                price = 32800;
                break;
            case "gold_6":
                price = 64800;
                break;
        }
        //console.log("获得商品id:", id, count, price);
        // 判断设备系统
        let systemType = "Android";
        try {
            //@ts-ignore
            const systemInfo = wx.getSystemInfoSync();
            if (systemInfo.platform === 'ios') {
                systemType = "ios";
            }
        } catch (e) {
            console.error('获取系统信息失败', e);
        }

        // Utils.GoKEFu();
        if (systemType == "ios") {
            // MiniGameSdk.API.showToast("IOS系统暂不支持支付");
            // this.btn_Touch = true;
            this.openLoad();
            let iosPayInfo = {
                price: price,
                payment_name: productId,
                payment_count: 1,
            }
            this.iosPrice = price;
            this.iosProductId = productId;
            this.iosCount = 1;
            Utils.GoKEFu(iosPayInfo, (res) => {
                this.closeLoad();
            });
        }
        else {
            const data = {
                outTradeNo: Utils.outTradeNo,
                price: price,
                payment_name: productId,
                payment_num: 1,
                type: systemType,
            }
            cc.fx.GameTool.shushu_Track("init_order", data);
            this.openLoad();
            //console.log("7.14_____________________", "调用充值接口");
            Utils.buyProp(id, count, price, (res) => {
                //console.log("获得充值结果", res);
                if (res == null) {
                    MiniGameSdk.API.showToast("充值失败");
                    this.btn_Touch = true;
                    const dataFail = {
                        outTradeNo: Utils.outTradeNo,
                        price: price,
                        payment_name: productId,
                        payment_num: 1,
                        type: systemType,
                        fail_reason: "网络异常,没有拉起支付",
                    }
                    cc.fx.GameTool.shushu_Track("payment_fail", dataFail);
                    this.closeLoad();
                    return;
                }
                else if (res.err) {
                    MiniGameSdk.API.showToast("充值失败");
                    //console.log(res);
                    this.btn_Touch = true;
                    let name = "支付拉起失败";
                    if (res.errCode == -2) {
                        name = "用户取消充值";
                    }
                    const dataFail = {
                        outTradeNo: Utils.outTradeNo,
                        price: price,
                        payment_name: productId,
                        payment_num: 1,
                        type: systemType,
                        fail_reason: name,
                    }
                    cc.fx.GameTool.shushu_Track("payment_fail", dataFail);
                    this.closeLoad();
                    return;
                }
                else {
                    Utils.getPayInfo((data) => {
                        //console.log("7.14_______________充值成功，准备轮训");
                        //console.log("获得轮训结果:", data);
                        this.closeLoad();
                        if (data.data.pay_state == 1) {
                            this.btn_Touch = true;
                            MiniGameSdk.API.showToast("取消充值");
                            const dataFail2 = {
                                outTradeNo: Utils.outTradeNo,
                                price: price,
                                payment_name: productId,
                                payment_num: 1,
                                type: systemType,
                                fail_reason: "用户取消支付",
                            }
                            cc.fx.GameTool.shushu_Track("payment_fail", dataFail2);
                        }
                        else if (data.data.pay_state == 2) {
                            this.btn_Touch = true;
                            const dataSuccess = {
                                outTradeNo: Utils.outTradeNo,
                                price: price,
                                payment_name: productId,
                                payment_num: 1,
                                type: systemType,
                            }
                            cc.fx.GameTool.shushu_Track("payment", dataSuccess);
                            let name = "购买金币道具:" + productId;
                            MiniGameSdk.API.yinli_Pay(price, Utils.outTradeNo, name)
                            //console.log("7.14_______________充值成功，轮训成功，准备发货");
                            Utils.setPayInfo(
                                (res) => {
                                    //console.log("设置轮训结果:", res);
                                    if (res.code === 1) {
                                        //console.log("7.14_________正式发货");
                                        MiniGameSdk.API.showToast("充值成功");
                                        cc.fx.GameTool.shopBuy(productId);
                                        //console.log("充值成功获得金币");
                                    }
                                    else {
                                        MiniGameSdk.API.showToast("网络异常，充值奖励将在登录后再次发放");
                                        const dataFail4 = {
                                            outTradeNo: Utils.outTradeNo,
                                            price: price,
                                            payment_name: productId,
                                            payment_num: 1,
                                            type: systemType,
                                            fail_reason: "成功付款，但是发货时请求服务器失败，充值成功未发货",
                                        }
                                        cc.fx.GameTool.shushu_Track("payment_fail", dataFail4);
                                    }
                                    NumberToImage.numberToImageNodes(cc.fx.GameConfig.GM_INFO.coin, 30, 15, "coin_", this.coin, true);
                                    if (this.node.parent.getComponent("JiaZai"))
                                        this.node.parent.getComponent("JiaZai").updateCoin();
                                    else if (this.node.parent.getComponent("SceneManager")) {
                                        this.node.parent.getComponent("SceneManager").updateCoin();
                                    }
                                }, null)
                        }
                        else {
                            NumberToImage.numberToImageNodes(cc.fx.GameConfig.GM_INFO.coin, 30, 15, "coin_", this.coin, true);
                            const dataFail3 = {
                                outTradeNo: Utils.outTradeNo,
                                price: price,
                                payment_name: productId,
                                payment_num: 1,
                                type: systemType,
                                fail_reason: "拉起支付后，付款时网络异常付款失败",
                            }
                            cc.fx.GameTool.shushu_Track("payment_fail", dataFail3);
                            this.btn_Touch = true;
                            if (this.node.parent.getComponent("JiaZai"))
                                this.node.parent.getComponent("JiaZai").updateCoin();
                            else if (this.node.parent.getComponent("SceneManager")) {
                                this.node.parent.getComponent("SceneManager").updateCoin();
                            }
                        }
                    })
                }
            });
        }

    }
    // update (dt) {}
}
