// Learn TypeScript:
//  - https://docs.cocos.com/creator/2.4/manual/en/scripting/typescript.html
// Learn Attribute:
//  - https://docs.cocos.com/creator/2.4/manual/en/scripting/reference/attributes.html
// Learn life-cycle callbacks:
//  - https://docs.cocos.com/creator/2.4/manual/en/scripting/life-cycle-callbacks.html

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

const { ccclass, property } = cc._decorator;

@ccclass
export default class NewClass extends cc.Component {

    @property(cc.Node)
    monthCardTime: cc.Node = null;
    //月卡按钮切换
    @property(cc.Node)
    monthCardBtn: cc.Node = null;
    //月卡按钮
    @property(cc.Node)
    monthCardBtn2: cc.Node = null;
    public juwai = false;
    btn_Touch: boolean = false;

    // LIFE-CYCLE CALLBACKS:
    private onShowListener: () => void;
    private iosPrice: number = 0;
    private iosProductId: string = "";
    private iosCount: number = 1;
    public home: number = 0;

    onLoad() {
        this.btn_Touch = true;
        // 检测微信小游戏切到后台
        this.home = 0;
    }

    onShow() {
        console.log("后台进入前台，monthlcard");
        if (cc.sys.platform === cc.sys.WECHAT_GAME) {
            console.log("从后台进入前台订单号:", cc.fx.GameConfig.GM_INFO.iosMonthOrder);
            if (cc.fx.GameConfig.GM_INFO.iosMonthOrder != null && cc.fx.GameConfig.GM_INFO.iosMonthOrder != "") {
                console.log("有苹果订单号，开始轮训");
                const iosMonthOrder = cc.fx.GameConfig.GM_INFO.iosMonthOrder;
                this.openLoad();
                this.btn_Touch = true;
                Utils.getIosPayInfo(iosMonthOrder,
                    (data) => {
                        console.log("月卡获得轮训结果:", data);
                        const iosID = data.data?.payment_name || this.iosProductId;
                        let iosAmount = data.data?.goodsPrice || this.iosPrice;
                        iosAmount = parseInt(iosAmount);
                        if (data.code == 1) {
                            console.log("购买成功");
                            // const dataSuccess = {
                            //     outTradeNo: iosMonthOrder,
                            //     pay_amount: iosAmount,
                            //     payment_name: iosID,
                            //     payment_num: this.iosCount,
                            //     type: "ios",
                            // }
                            // cc.fx.GameTool.shushu_Track("payment", dataSuccess);
                            let name = "购买金币道具:" + iosID;
                            console.log("引力付费透传", iosAmount, iosMonthOrder, name);
                            MiniGameSdk.API.yinli_Pay(iosAmount, iosMonthOrder, name)

                            console.log("_________正式发货");
                            MiniGameSdk.API.showToast("充值成功");

                            if (iosID == "month_Card") {
                                this.setReward(iosID);
                            }
                            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();
                            }
                            //console.log("充值成功获得金币");
                        }
                        else if (data.code == 0) {
                            console.log("用户自己取消充值");
                            MiniGameSdk.API.showToast("充值失败");
                            this.closeLoad();
                            this.btn_Touch = true;
                            const dataFail = {
                                outTradeNo: iosMonthOrder,
                                pay_amount: iosAmount,
                                payment_name: iosID,
                                payment_num: this.iosCount,
                                type: "ios",
                                fail_reason: "用户取消充值",
                            }
                            cc.fx.GameTool.shushu_Track("payment_fail", dataFail);
                            cc.fx.GameConfig.GM_INFO.iosMonthOrder = null;
                        }
                        else if (data.code == 2) {
                            this.closeLoad();
                            this.btn_Touch = true;
                            console.log("轮训超时");
                            MiniGameSdk.API.showToast("请检查网络,如充值成功，请重新登录领取", 4);
                            // MiniGameSdk.API.showToast("订单已关闭");
                            const dataFail = {
                                outTradeNo: iosMonthOrder,
                                pay_amount: iosAmount,
                                payment_name: iosID,
                                payment_num: this.iosCount,
                                type: "ios",
                                fail_reason: "用户充值后，轮训结果超时",
                            }
                            cc.fx.GameTool.shushu_Track("payment_fail", dataFail);
                            this.openConfirmBox();
                        }
                    })
            }
        }

    }

    start() {
        let isExpired = cc.fx.GameTool.checkExpiration();
        if (isExpired == false) {
            this.monthCardBtn.active = true;
            this.monthCardBtn2.active = false;
        } else {
            this.monthCardBtn.active = false;
            this.monthCardBtn2.active = true;
            NumberToImage.numberToImageNodes(cc.fx.GameConfig.GM_INFO.monthTime, 35, 20, "month_", this.monthCardTime, true);

        }
    }
    init() {
        let isExpired = cc.fx.GameTool.checkExpiration();
        if (cc.sys.platform === cc.sys.WECHAT_GAME) {
            // 定义监听函数
            this.onShowListener = () => {
                console.log("微信小游戏切到前台,monthCard");
                this.onShow();
            };
            //@ts-ignore
            wx.onShow(this.onShowListener);
        }
        this.btn_Touch = true;
        if (isExpired) {
            this.monthCardBtn.active = false;
            this.monthCardBtn2.active = true;
            NumberToImage.numberToImageNodes(cc.fx.GameConfig.GM_INFO.monthTime, 35, 20, "month_", this.monthCardTime, true);
        } else {
            this.monthCardBtn.active = true;
            this.monthCardBtn2.active = false;
        }
    }

    //购买月卡
    buyMonthCard(id) {
        Utils.setMonthlyCard(0, (data) => {
            console.log("购买月卡", data.code);
            if (data.code == 1) {
                this.setReward(id);
                // let rewardData = [
                //     { type: "coin", count: 6000 },
                // ]

            }
        })
        // update (dt) {}
    }

    setReward(id) {
        cc.fx.GameConfig.GM_INFO.iosMonthOrder = null;
        this.closeLoad();
        this.btn_Touch = true;
        cc.fx.GameTool.shopBuy(id, false);
        cc.fx.GameConfig.GM_INFO.hp_Max = 7;
        cc.fx.GameConfig.GM_INFO.hp = 7;
        cc.fx.GameConfig.GM_INFO.doubleCoin = 2;
        this.home = 1;
        cc.fx.GameTool.getMonthlyCardValidityDays().then(days => {
            cc.fx.GameConfig.GM_INFO.monthTime = days.days;
            //本地储存当前服务器时间
            let dateStr = new Date(days.time);
            cc.fx.StorageMessage.setStorage("mCardDate", dateStr);
            NumberToImage.numberToImageNodes(days.days, 35, 20, "month_", this.monthCardTime, true);

        });
        // cc.fx.GameTool.changeCoin(6000);
        const jiazaiNode = cc.find("Canvas"); // 假设 JiaZai 挂在 Canvas 节点
        const jiazaiComp = jiazaiNode.getComponent(JiaZai);
        if (jiazaiComp) {
            console.log("获取到JiaZai组件", jiazaiComp);
            setTimeout(() => {
                jiazaiComp.setHealthInfo(false);
                jiazaiComp.startTimeCutDown();
                jiazaiComp.updateCoin();

            }, 300);
        } else {
            console.log("无法获取JiaZai组件");
        }

        this.monthCardBtn.active = false;
        this.monthCardBtn2.active = true;
        this.monthCardTime.active = true;
        cc.fx.GameTool.setUserHealth(0, (data) => {
            cc.fx.GameTool.getHealth(null);
        })
        let shop = cc.find("Canvas/shop");
        if (shop) {
            let shopComp = shop.getComponent("shop");
            if (shopComp) {
                shopComp.openShop();
            }
        }

    }

    closeMonthCard() {
        // this.init();
        //获取商城界面更新图标方法
        let shop = cc.find("Canvas/shop");
        if (shop) {
            let shopComp = shop.getComponent("shop");
            if (shopComp) {
                shopComp.openShop();
            }
        }

        // 移除 wx.onShow 监听器
        if (cc.sys.platform === cc.sys.WECHAT_GAME && this.onShowListener) {
            console.log("月卡关闭监听");
            //@ts-ignore
            wx.offShow(this.onShowListener);

        }
        //jiazai
        const jiazaiNode = cc.find("Canvas"); // 假设 JiaZai 挂在 Canvas 节点
        const jiazaiComp = jiazaiNode.getComponent(JiaZai);
        let isExpired = cc.fx.GameTool.checkExpiration();
        if (jiazaiComp && this.home == 1 && isExpired) {
            this.home = 0;
            jiazaiComp.rewarded();
            console.log("123iiiii222")
        }
        if (jiazaiComp) {
            console.log("22222222")
            jiazaiComp.onGames();

        }

        this.node.active = false;
    }

    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 "month_Card":
                price = 3000;
                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);
        }

        if (systemType == "ios") {
            // MiniGameSdk.API.showToast("IOS系统暂不支持支付");
            // this.btn_Touch = true;
            this.openLoad();
            this.btn_Touch = true;
            let iosPayInfo = {
                price: price,
                payment_name: productId,
                payment_count: 1,
            }
            this.iosPrice = price;
            this.iosProductId = productId;
            this.iosCount = 1;
            Utils.GoKEFu(iosPayInfo, (res) => {
                if (res == "success") {
                    console.log("客服回话成功");
                }
                else {
                    console.log("客服回话失败");
                    this.closeLoad();
                }
            });
        }
        else {
            // MiniGameSdk.API.showToast("充值成功");
            // cc.fx.GameTool.shopBuy(productId, false);
            // setTimeout(() => {
            //     if (productId == "unlimited_health_bundle_1" ||
            //         productId == "unlimited_health_bundle_2" ||
            //         productId == "unlimited_health_bundle_3"
            //     ) {
            //         console.log("触发————————updatePower");
            //         this.updatePower();
            //     }
            // }, 500);

            this.openLoad();
            this.btn_Touch = true;
            //console.log("7.14_____________________", "调用充值接口");
            Utils.buyProp(id, count, price, systemType, productId, (res) => {
                //console.log("获得充值结果", res);
                if (res == null) {
                    MiniGameSdk.API.showToast("充值失败");
                    this.btn_Touch = true;
                    const dataFail = {
                        outTradeNo: Utils.outTradeNo,
                        pay_amount: 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,
                        pay_amount: 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,
                                pay_amount: 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,
                            //     pay_amount: price,
                            //     payment_name: productId,
                            //     payment_num: 1,
                            //     type: systemType,
                            // }
                            // cc.fx.GameTool.shushu_Track("payment", dataSuccess);
                            let name = "购买金币道具:" + productId;
                            console.log("引力付费透传", price, Utils.outTradeNo, name);
                            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("充值成功");

                                        if (productId == "month_Card") {
                                            this.buyMonthCard(productId);
                                        }
                                        //console.log("充值成功获得金币");
                                    }
                                    else {
                                        MiniGameSdk.API.showToast("网络异常，充值奖励将在登录后再次发放");
                                        const dataFail4 = {
                                            outTradeNo: Utils.outTradeNo,
                                            pay_amount: price,
                                            payment_name: productId,
                                            payment_num: 1,
                                            type: systemType,
                                            fail_reason: "成功付款，但是发货时请求服务器失败，充值成功未发货",
                                        }
                                        cc.fx.GameTool.shushu_Track("payment_fail", dataFail4);
                                    }

                                    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();
                                    }
                                }, Utils.outTradeNo)
                        }
                        else {

                            const dataFail3 = {
                                outTradeNo: Utils.outTradeNo,
                                pay_amount: 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();
                            }
                        }
                    })
                }
            });
        }
    }
    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());
    }

    openConfirmBox() {
        this.closeLoad();
        this.node.getChildByName("ConfirmBox").active = true;
    }

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

    onDestroy() {

    }
}
