import date from "../Unit/date.js"
import gameToast from "../Network/gameToast"
/**
 * 操作租赁土地的相关业务
 */
cc.Class({
    extends: cc.Component,

    properties: {
        leasePanelPrefabs: {
            default: null,
            type: cc.Prefab,
            serializable: true,
        },

        //主信息面板
        infoBox: cc.Node,

        //时间计算对象
        showTimeOut: null,

        /**
         * 显示天数部分
         */
        upSliderNode: {
            default: null,
            type: cc.Node,
            serializable: true,
        },
        multipleLabel: {
            default: null,
            type: cc.Label,
            serializable: true,
            toolTip: "显示的倍数"
        },
        leaseDate: {
            default: null,
            type: cc.Label,
            serializable: true,
            toolTip: "剩余天数/总天数"
        },


        /**
         * 成熟期部分
         */
        midSliderNode: {
            default: null,
            type: cc.Node,
            serializable: true,
        },
        midDate: {
            default: null,
            type: cc.Label,
            serializable: true,
            toolTip: "剩余天数/总天数"
        },

        midSliderProgressNode: {
            default: null,
            type: cc.Node,
            serializable: true,
            toolTip: "进度条"
        },


        notLeased: {
            default: null,
            type: cc.Node,
            serializable: true,
        },

        //初始化时候对应的土地的id
        initConfigLandId: -1,

        // configLandId: 1
        // createTime: "2022-01-10 21:25:30"
        // id: 1
        // isLease: 1
        // isPlant: 0
        // landDescribe: "土地1xxx"
        // leaseMultiple: 1
        // leaseTime: "2022-01-10 21:25:17"
        // name: "土地1"
        // plantMature: 0
        // plantStart: "2022-01-10 21:25:22"
        // updateTime: "2022-01-10 21:25:33"
        // userId: "4"
        // 已经租赁的土地信息
        leaseLandInfo: {
            default: null,
            visible: false
        },

        // createTime: "2022-01-10 21:25:30"
        // id: 4
        // initMultiple: 1
        // isInit: 1
        // isLease: 0
        // isPlant: 0
        // landDescribe: "一倍土地"
        // leaseMultiple: 1
        // leaseTime: "2022-01-10 21:25:17"
        // name: "土地4"
        // plantMature: 0
        // plantStart: "2022-01-10 21:25:22"
        // posX: 19
        // posY: 10
        // sizeX: 2
        // sizeY: 2
        // updateTime: "2022-01-10 21:25:33"
        // 未初始化时候的土地信息
        configLandInfo: {
            default: null,
            visible: false
        },

        showLandInfo: {
            default: null,
            type: cc.Node,
            serializable: true,
            toolTip: "显示土地信息"
        },
        landInfoPrefabs: {
            default: null,
            type: cc.Prefab,
            serializable: true,
        },

        // 已经种植的作物信息
        plantInfo: {
            default: null,
            visible: false
        },
        showPlantInfo: {
            default: null,
            type: cc.Node,
            serializable: true,
            toolTip: "显示种植信息"
        },
        plantInfoPrefabs: {
            default: null,
            type: cc.Prefab,
            serializable: true,
        },

        //收获阶段

        harvestNode: {
            default: null,
            type: cc.Node,
            serializable: true,
        },

        stealHarvestNode: {
            default: null,
            type: cc.Node,
            serializable: true,
        },

        isHarvest: false,

        /**
         * 成熟时候显示的图片
         */
        harvestSprite: {
            default: null,
            type: cc.SpriteFrame,
        },
        _workingBuilding: null,

        //时间计算对象
        timeInterval: null,

        //是否显示showHarvest
        isShowHarvest: false,
        isShowIndex: 0,

        //检查土地是否到期
        isCheckLandState: false,


        _buildingView: null
    },

    // LIFE-CYCLE CALLBACKS:

    onLoad() {
        this._workingBuilding = this.node.getComponent("WorkingBuilding");
        this._buildingView = cc.find("Canvas/UICamera/BuildingContainer/BuildingView").getComponent("BuildingView");

    },

    start() {
        this.harvestNode.on(cc.Node.EventType.TOUCH_START, () => {
            if (GlobalD.GameData.isOnAddFruit) return;
            console.log("点击收获");
            GlobalD.GameData.showToast(cc.find("Canvas/UICamera"), "收获中..", 5);
            let data = { landId: this.leaseLandInfo.configLandId };
            //果实收入仓库，重置土地种植信息
            GlobalD.GameData.onAddFruit(data, (value) => {
                // console.log(value);
                if (0 === value.code) {
                    //收成后处理相关状态
                    this.harvestNode.active = false;
                    this.midSliderNode.active = false
                    this._workingBuilding.onSetGrow(0, null);
                    //更新仓库列表
                    this._buildingView.onUpdateList();
                    // "收获成功！"
                    GlobalD.GameData.showToast(cc.find("Canvas/UICamera"), "收获成功！", 1);

                    this.isShowHarvest = false;
                    this.isShowIndex = 0;
                    if (this.timeInterval) {
                        clearInterval(this.timeInterval);
                        this.timeInterval = null;
                    }
                } else if (706 === value.code) {
                    //土地到期，没有更新刷新的处理刷新
                    GlobalD.GameData.showToast(cc.find("Canvas/UICamera"), value.msg, 1);
                    //重置锁定状态显示
                    this.onLockLand();

                } else {
                    GlobalD.GameData.showToast(cc.find("Canvas/UICamera"), value.msg, 1);
                }
            });
        })

        this.stealHarvestNode.on(cc.Node.EventType.TOUCH_START, () => {
            if (GlobalD.GameData.isOnAddFruit) return;
            console.log("点击收获");
            GlobalD.GameData.showToast(cc.find("Canvas/UICamera"), "收获中..", 5);
            let data = { otherLandId: this.leaseLandInfo.configLandId, otherUserId: GlobalD.GameData.OtherUserInfo.userId };
            //果实收入仓库，重置土地种植信息
            GlobalD.GameData.onStealFruit(data, (value) => {
                console.log(value);
                if (0 === value.code) {
                    //收成后处理相关状态
                    this.stealHarvestNode.active = false;
                    //更新仓库列表
                    this._buildingView.onUpdateList();
                    // "收获成功！"
                    GlobalD.GameData.showToast(cc.find("Canvas/UICamera"), "收获成功！", 1);

                    this.isShowHarvest = false;
                    this.isShowIndex = 0;
                    if (this.timeInterval) {
                        clearInterval(this.timeInterval);
                        this.timeInterval = null;
                    }
                } else if (706 === value.code) {
                    //土地到期，没有更新刷新的处理刷新
                    GlobalD.GameData.showToast(cc.find("Canvas/UICamera"), value.msg, 1);
                    //重置锁定状态显示
                    this.onLockLand();

                } else {
                    GlobalD.GameData.showToast(cc.find("Canvas/UICamera"), value.msg, 1);
                }
            });
        })
    },

    onSpawnLeasePanel() {

        let leasePanel = cc.instantiate(this.leasePanelPrefabs);
        let parent = cc.find('Canvas/UICamera/DAPPContainer');
        leasePanel.parent = parent;
        leasePanel.setPosition(0, 0);
        // leasePanel.zIndex = 999;

        //把操作对象传入
        let leasePanelScript = leasePanel.getComponent("LeaseInfo");
        leasePanelScript.leaseFarmlandInfoNode = this;
        /**
         * 初始化两个操作。一个是续约，续约的话，不给操作，只有续约按钮可点，相当于原来配置再购买一次
         * 
         * this.leaseLandInfo 如果购买了土地，这个参数不为空
         */

        if (this.leaseLandInfo) {
            //续约时候拦截输入，固定倍数 
            leasePanelScript.blockInput.active = true;
            //传入当前计算倍数
            leasePanelScript.onInitLeaseInfo(this.leaseLandInfo.leaseMultiple);
        } else if (0 === this.configLandInfo.initMultiple) {
            // 固定土地开启，限制输入，设置默认值是1
            leasePanelScript.blockInput.active = true;
            leasePanelScript.onInitLeaseInfo(1);
        } else {
            //多倍土地，可以自己输入
            leasePanelScript.onInitLeaseInfo(this.configLandInfo.initMultiple);
        }


    },

    /**
     * 解锁土地操作
     */
    onUnlockLand() {
        //直接删除此节点
        if (this.notLeased) {
            this.notLeased.active = false;
            // this.notLeased.destroy();
            // this.notLeased = null;
        }

    },
    /**
     * 获取锁定状态
     */
    onGetUnlockLandState() {
        return this.notLeased.active;
    },

    /**
     * 重新锁定
     */
    onLockLand() {

        //显示按钮
        if (this.notLeased) {
            this.notLeased.active = true;
        }
        //清除当前租赁数据
        this.leaseLandInfo = null;
        this.isShowHarvest = false;
        this.isShowIndex = 0;
        if (this.timeInterval) {
            clearInterval(this.timeInterval);
            this.timeInterval = null;
        }

        //去除提示框
        this.upSliderNode.parent.active = false;
        this.midSliderNode.active = false;
        this.harvestNode.active = false;

        this.stealHarvestNode.active = false;

        //重置土地图片
        this._workingBuilding.onSetGrow(0, null);

        this.onSetInfoBoxActive(false);

    },
    //设置config的土地信息
    setConfigLandInfo(value) {
        this.configLandInfo = value;
    },

    /**
     * 设置其他用户租赁的土地信息
     * 比如去其他用户家里偷取物品，目前统一在这处理
     */
    setLeaseLandInfo(value, bSelf) {
        console.log("土地信息是，bSelf:", bSelf);
        if (!value) {
            console.log("已租赁土地状态为空：", value);
            return;
        }

        this.onSetInfoBoxActive(false);

        //设置意思显示相关
        this.isShowHarvest = false;
        this.isShowIndex = 0;
        //重新设置租赁检测状态
        this.isCheckLandState = false;
        this.leaseLandInfo = value;

        //先解绑一下信息
        this.showLandInfo.off(cc.Node.EventType.TOUCH_START, this._showLandInfo, this);
        this.showPlantInfo.off(cc.Node.EventType.TOUCH_START, this._showPlantInfo, this);

        //每个作物直接实时计算时间
        if (this.timeInterval) {
            clearInterval(this.timeInterval);
            this.timeInterval = null;
        }
        //删除解锁图标
        this.onUnlockLand();

        //更新一下土地信息
        this.updateLandState(bSelf);
    },

    updateLandState(bSelf) {
        //显示剩余天数
        this.upSliderNode.parent.active = bSelf;
        this.multipleLabel.string = this.leaseLandInfo.leaseMultiple;
        //  进去条按天算
        let sliderProgressScript = this.upSliderNode.getComponent("slider_progress");
        let _proccess = this.leaseLandInfo.leaseDays === 0 ? 0 : this.leaseLandInfo.leaseDaysRemaining / this.leaseLandInfo.leaseDays;
        sliderProgressScript.onSetProcgress(_proccess);

        /**
         * 绑定生成显示信息面板，现在土地信息
         */
        this.showLandInfo.on(cc.Node.EventType.TOUCH_START, this._showLandInfo, this);
        //如果是种植状态并且有返回种植信息
        if (1 === this.leaseLandInfo.isPlant && this.leaseLandInfo.seedInfo) {
            //种植信息
            //如果土地是租赁转态并且同时种植了 ，这里处理土地状态，显示种植信息
            let _spriteFrame;
            switch (this.leaseLandInfo.seedInfo.picture) {
                case "Cabbage":
                    _spriteFrame = this._buildingView.fruitSpriteFrame[0];
                    break;
                case "Potato":
                    _spriteFrame = this._buildingView.fruitSpriteFrame[1];
                    break;
                case "Carrot":
                    _spriteFrame = this._buildingView.fruitSpriteFrame[2];
                    break;
                case "Broccoli":
                    _spriteFrame = this._buildingView.fruitSpriteFrame[3];
                    break;
                case "Tomato":
                    _spriteFrame = this._buildingView.fruitSpriteFrame[4];
                    break;
                case "Squash":
                    _spriteFrame = this._buildingView.fruitSpriteFrame[5];
                    break;
                case "Eggplant":
                    _spriteFrame = this._buildingView.fruitSpriteFrame[6];
                    break;
                case "Pepper":
                    _spriteFrame = this._buildingView.fruitSpriteFrame[7];
                    break;
                case "Lentil":
                    _spriteFrame = this._buildingView.fruitSpriteFrame[8];
                    break;
                default:
                    break;
            }
            //设置一个收获时候的图片
            this.harvestSprite = _spriteFrame;

            this.midSliderNode.active = bSelf;
            // 进度条按小时计算
            let _maturityAllHour = this.leaseLandInfo.seedInfo.maturity * 24
            let _remainAllHour = this.leaseLandInfo.plantDaysRemaining * 24 + this.leaseLandInfo.plantHoursRemaining;
            //计算剩余时间显示（进度条）
            let _midProccess = _maturityAllHour === 0 ? 0 : _remainAllHour / _maturityAllHour;
            this.midSliderProgressNode.getComponent(cc.ProgressBar).progress = _midProccess;
            /**
              * 绑定生成显示信息面板，种植信息
              */
            this.showPlantInfo.on(cc.Node.EventType.TOUCH_START, this._showPlantInfo, this);
        }

        let lastUpdateTime = Date.now();
        let elapsedTime = 0;
        let updateFrequency = 1; //ms
        this.timeInterval = setInterval(() => {
            let currentTime = Date.now();
            let deltaTime = currentTime - lastUpdateTime;
            elapsedTime += deltaTime;
            if (elapsedTime >= updateFrequency) {
                elapsedTime -= updateFrequency;
                let _leaseDaysMill = this.leaseLandInfo.leaseDaysMill - elapsedTime;
                let _plantDaysMill = this.leaseLandInfo.plantDaysMill - elapsedTime;
                lastUpdateTime = currentTime;
                // 更新计时显示
                let [_lDay, _lHour, _lMinutes, _lSeconds] = date.remainFromMillisecond(_leaseDaysMill);
                //todo 处理了 this.leaseLandInfo.leaseDaysRemaining
                if (0 !== _lDay) {
                    this.leaseDate.string = "剩" + _lDay + "天/" + this.leaseLandInfo.leaseDays + "天";
                } else if (0 !== _lHour) {
                    this.leaseDate.string = "剩" + _lHour + "时/" + this.leaseLandInfo.leaseDays + "天";
                } else if (0 !== _lMinutes) {
                    this.leaseDate.string = "剩" + _lMinutes + "分/" + this.leaseLandInfo.leaseDays + "天";
                } else {
                    this.leaseDate.string = "剩" + _lSeconds + "秒/" + this.leaseLandInfo.leaseDays + "天";
                }
                //todo 如果租赁时间到了，重新锁定
                //重置锁定状态显示
                if (!this.isCheckLandState) {
                    if (_leaseDaysMill <= 0) {
                        this.isCheckLandState = true;
                        //检查一次土地
                        this.onCheckLand(this.leaseLandInfo.configLandId);
                    }
                }

                if (1 === this.leaseLandInfo.isPlant && this.leaseLandInfo.seedInfo) {
                    //获得服务器种植日期毫秒
                    let [_pDay, _pHour, _pMinutes, _pSeconds] = date.remainFromMillisecond(_plantDaysMill);
                    //todo 处理了 this.leaseLandInfo.plantDaysRemaining
                    if (0 !== _pDay) {
                        //否则显示天和小时
                        this.midDate.string = "剩" + _pDay + "天" + _pHour + "时";
                    } else if (0 !== _pHour) {
                        this.midDate.string = "剩" + _pHour + "时" + _pMinutes + "分";
                    } else {
                        this.midDate.string = "剩" + _pMinutes + "分" + _pSeconds + "秒";
                    }
                    if (!this.isShowHarvest) {
                        if (_plantDaysMill <= 0) {
                            this.isShowHarvest = true;
                            this.isShowIndex = 3;
                            //如果传回的毫秒是小于零，说明成熟了
                            //成熟阶段
                            this._workingBuilding.onSetGrow(3, this.harvestSprite);
                            // console.log("土地：", _userLeaseLand[j].configLandId, "已经成熟,可以操作收取果实了！！");
                            //如果是自己的，显示收成
                            if (bSelf) {
                                this.onShowHarvest();
                            } else {
                                this.onShowStealHarvest();
                            }
                        } else {
                            let _maturityHour = this.leaseLandInfo.seedInfo.maturity * 24
                            let _ratio = (_pDay * 24 + _pHour) / _maturityHour;
                            if (_ratio > 0.5 && 1 !== this.isShowIndex) {
                                this.isShowIndex = 1;
                                this._workingBuilding.onSetGrow(1, this.harvestSprite);
                                console.log("_ratio:" + _ratio + "=" + this.leaseLandInfo.configLandId + ",状态：" + this.isShowIndex);
                            } else if (_ratio <= 0.5 && _ratio >= 0 && 2 !== this.isShowIndex) {
                                this.isShowIndex = 2;
                                this._workingBuilding.onSetGrow(2, this.harvestSprite);
                                console.log("_ratio:" + _ratio + "=" + this.leaseLandInfo.configLandId + ",状态：" + this.isShowIndex);
                            }
                        }
                    }

                }
            }
        });
    },

    _showLandInfo() {
        let leasePanel = cc.instantiate(this.landInfoPrefabs);
        let parent = cc.find('Canvas/UICamera/DAPPContainer');
        leasePanel.parent = parent;
        leasePanel.setPosition(0, 0);
        let leasePanelScript = leasePanel.getComponent("LandInfo");
        let _date = date.datedifference(this.leaseLandInfo.createTime, this.leaseLandInfo.leaseTime);
        let { configLandId, rentalExpenses, createTime, leaseTime, leaseMultiple, landDescribe } = this.leaseLandInfo;
        leasePanelScript.setInfo(configLandId, rentalExpenses, _date + "天", createTime, leaseTime, leaseMultiple + "倍", landDescribe);
    },

    _showPlantInfo() {
        let leasePanel = cc.instantiate(this.plantInfoPrefabs);
        let parent = cc.find('Canvas/UICamera/DAPPContainer');
        leasePanel.parent = parent;
        leasePanel.setPosition(0, 0);
        // leasePanel.zIndex = 999;
        let leasePanelScript = leasePanel.getComponent("PlantInfo");
        let _harvest = 0;
        if (this.leaseLandInfo.leaseDate === 1) {
            _harvest = this.leaseLandInfo.seedInfo.harvest1;
        } else if (this.leaseLandInfo.leaseDate === 2) {
            _harvest = this.leaseLandInfo.seedInfo.harvest2;
        } else if (this.leaseLandInfo.leaseDate === 3) {
            _harvest = this.leaseLandInfo.seedInfo.harvest3;
        }
        //price,maturity,plantStart,harvestQuantity,describe
        let { name, priceCnt, maturity, seedDescribe } = this.leaseLandInfo.seedInfo;
        leasePanelScript.setInfo(name, priceCnt, maturity + "天", this.leaseLandInfo.plantStart, _harvest, seedDescribe);
    },

    //更新收获的状态
    updateHarvest() {
        //todo 后续看看如何刷新，现在走的是开始刷新一次
        // let _workingBuilding = housingTemp_farmland.getComponent("WorkingBuilding");
        // //获得服务器种植日期毫秒
        // let [_day, _hour, _minutes, _seconds] = date.remainFromMillisecond(_leaseLandInfo.plantDaysMill);
        // let _maturityHour = _leaseLandInfo.seedInfo.maturity * 24
        // let _ratio = _hour / _maturityHour;
        // // console.log("生成的：" + _ratio);
        // if (_ratio > 0.5) {
        //     _workingBuilding.onSetGrow(1, _spriteFrame);
        // } else if (_ratio >= 0) {
        //     _workingBuilding.onSetGrow(2, _spriteFrame);
        // }else if (_leaseLandInfo.plantDaysMill <= 0) {
        //     //如果传回的毫秒是小于零，说明成熟了
        //     //成熟阶段
        //     _workingBuilding.onSetGrow(3, _spriteFrame);
        //     //todo，如果时间小的，走收获，收获成果实
        //     // console.log("土地：", _userLeaseLand[j].configLandId, "已经成熟,可以操作收取果实了！！");
        //     //todo 土地可收获状态
        //     leaseFarmlandInfoScript.onShowHarvest();
        // }
    },

    //检查土地状态
    onCheckLand(configLandId) {
        GlobalD.GameData.getLandState({
            landId: configLandId,
            callback: (value) => {
                console.log("检查土地数据:" + JSON.stringify(value.msg));
                //这里只判断土地是否过期
                if (706 === value.code) {
                    //土地到期，没有更新刷新的处理刷新
                    GlobalD.GameData.showToast(cc.find("Canvas/UICamera"), configLandId + "号," + value.msg, 2);
                    //重置锁定状态显示
                    this.onLockLand();
                }
            }
        });
    },


    /**
     * 场景有多个收获预制时候，用GameData限制
     * 点击之后，重置土地信息， 并且收入进仓库果实列表中去
     * 需要防多次触发
     */
    onShowHarvest() {
        this.harvestNode.active = true;

    },


    /**
     * 场景有多个收获预制时候，用GameData限制
     * 点击之后，偷取果实
     * 需要防多次触发
     */
    onShowStealHarvest() {
        this.stealHarvestNode.active = true;
    },

    /**
     * 设置总体信息面板显示
     * @param {boolean} bActive 
     */
    onSetInfoBoxActive(bActive) {
        if (this.leaseLandInfo){
            this.infoBox.active = bActive;
            if(bActive)
            {
                if(this.showTimeOut){
                    clearTimeout(this.showTimeOut);
                    this.showTimeOut = null;
                }
                //自动隐藏面板
                this.showTimeOut = setTimeout(()=>{
                    this.infoBox.active = false;
                },5000)
            }
        }
            
    },

    
    onDestroy() {
        if (this.timeInterval) {
            clearInterval(this.timeInterval);
            this.timeInterval = null;
        }
        if(this.showTimeOut){
            clearTimeout(this.showTimeOut);
            this.showTimeOut = null;
        }
    }
});
