// pages/home/jl/index.js
const app = getApp();//新建页面时 默认引入
const req = app.xzjlReq();//初始化一个的request() 实例
import Toast from 'tdesign-miniprogram/toast/index';
Page({

    /**
     * 页面的初始数据
     */
    data: {
        singleShow:false,
        loverShow:false,
        xingxiangtu:{},
        userInfo:{},
        loverInfo:{},
        hours:0,
        minute:0,
        minutes:0,
        pickerValue: [0, 0],
        swiperIndex: 0,
        prayTime:'00:00:00', //祈祷时间
        prayTimeStr: '选择祈祷时长' ,
        prayerContent:'', //祈祷内容
        showSexLogo:false,//不展示形象修改按钮
        showPray:false, //显示祈祷弹层
        showIsPray:false, //显示取消祈祷弹层
        showEnergy:false, //显示赠送能量弹层
        showEnergyToast:false, //显示赠送能量提示
        showEnergySuccess:false, //赠送成功提示
        showEnergyFail:false, //赠送成功提示
        showInject:false, //显示注入能量
        showInEnergy:false, //显示能量注入中
        showScsEnergy:false, //显示注册成功提示
        showTiming:false, //显示祈祷时间弹层
        jmEnergy:false,
        showInjectBkc: false, //显示注入能量按钮动画
        inPrayer: true,
        qdTime: null,
        ysTime: ''

    },
    ShowOrNotLogoS(){
        this.setData({singleShow:!this.data.singleShow})
    },
    ShowOrNotLogoL(){
        this.setData({loverShow:!this.data.loverShow})
    },
    doSetXxtAnimal(){
        this.doSetXxt('animal')
    },
    doSetXxtMale(){
        this.doSetXxt('male')
    },
    showTiming(){this.setData({showTiming : !this.data.showTiming})},
    doSetXxtFemale(){
        this.doSetXxt('female')
    },
    closeJmEnergy(){
        this.setData({jmEnergy: false})
    },
    doSetXxt(e){
        req.patchRequest('/api/user/curt',{spriteType:e}).then((res)=>{
            if(res.data.code==200){
            }
            this.getUserInfo()
           }).catch((err)=>{
            console.log(err);
        })
    },
    doSetXxtAnimalS(){
        this.doSetXxtS('animal')
    },
    doSetXxtMaleS(){
        this.doSetXxtS('male')
    },
    doSetXxtFemaleS(){
        this.doSetXxtS('female')
    },
    doSetXxtS(e){
        req.patchRequest('/api/user/curt/lover',{spriteType:e}).then((res)=>{
            if(res.data.code==200){
            }
            this.getUserLoverInfo()
           }).catch((err)=>{
            console.log(err);
        })
    },
    /**获取形象对应的图片 */
    getXxObj(){
        const horoscopes = wx.getStorageSync('xy-static-img')
        const userType = this.data.userInfo.constellation
        const loveType = this.data.loverInfo.constellation
        this.setData({
            xingxiangtu: horoscopes[userType],
        })
        if (loveType) {
            this.setData({
                xingxiangtuLove: horoscopes[loveType],
            })
        }
        
    },
    ShowOrNotLogo(){
        this.setData({showSexLogo:!this.data.showSexLogo})
    },
    getUserLoverInfo(){
        req.getRequest('/api/user/curt/lover',{}).then((res)=>{
            if(res.data.code==200){
                this.setData({loverInfo:res.data.data})

                if (res.data.data.prayerStartTime) {
                    this.getQdTime(res.data.data)
                }
            }
           }).catch((err)=>{
            console.log(err);
        })
    },
    getTextValue(e){
        console.log(e.detail.value);
        this.setData({
            prayerContent:e.detail.value
        })
        console.log(this.data.prayerContent);
    },
    openEnergy(){
        this.setData({
            showEnergy:!this.data.showEnergy
        })
    },
    cancelEnergy(){
        this.setData({
            showEnergy:!this.data.showEnergy
        })
    },
    cancelEnergyToast(){
        this.setData({
            showEnergyToast:false,
            showEnergyFail:false
        })
    },
    openPray(){
        this.getUserInfo()
        if(this.data.userInfo.isInPrayer){
            this.setData({
                showIsPray:!this.data.showIsPray
            })
        }else{
            this.setData({
                showPray:!this.data.showPray,
                prayerContent:'',
                prayTimeStr: '选择祈祷时长'
            })
        }
        this.setData({showTiming: false})
    },
    onPickerChange(e){
        console.log(e.detail.value);
        const time = e.detail.value[0] + '小时' + e.detail.value[1] + '分钟'
        this.setData({prayTimeStr: time})
        if(e.detail.value[0] === this.data.hours){
            this.setData({
                minutes:this.data.minute
            })
        }else{
            this.setData({
                minutes:59
            })
        }
        this.setData({
          pickerValue: e.detail.value
        })
    },
    openInject(){
        console.log('注入能量');
        this.setData({
            showInjectBkc: true
        })
        const touchTimer = setTimeout(() => {
            this.setData({
                showInject:!this.data.showInject,
            })
        }, 3000);
        this.setData({
            touchTimer: touchTimer
        })  
    },
    closeInject(){
        console.log('结束');
        this.setData({showInjectBkc: false})
        clearInterval(this.data.touchTimer)
    },
    clostBtnInject(){
        this.setData({
            showInject:!this.data.showInject
        })
    },
    // 注入晶石
    btnInject(){
        // 判断之前加持是否已结束
        if (this.data.userInfo.pendantLuckInBlessing) {
            wx.showToast({
              title: '吊坠能量加持未结束',
              icon: 'none'
            })
            return this.setData({
                showInject: false
            })
        }

        // 判断是否有能量
        if (this.data.userInfo.crystallineEnergy) {
            this.setData({
                showInject:!this.data.showInject,
                showInEnergy:!this.data.showInEnergy,
                crystallineEnergy: this.data.userInfo.crystallineEnergy
            })
            req.patchRequest('/api/user/curt/inject-energy-to-pendant',{}).then((res)=>{
                if (res.data.code === 200) {
                    console.log(res, '能量注入成功');
                    setTimeout(()=>{
                        this.setData({
                            showInEnergy:!this.data.showInEnergy,
                            showScsEnergy:true 
                        })
                        this.getUserInfo()
                    },2000)
                }
            })
            // 计算守护时长
            const energy = (this.data.userInfo.pendantEnergy + this.data.userInfo.crystallineEnergy) * 4.8
            let minute = 0
            let hour = 0
            if (energy >= 60) {
                hour = Math.floor(energy / 60)
                minute = Math.floor(energy - (hour * 60 ))
                if (minute < 10) {
                    minute = '0' + minute
                }
            }
            this.setData({
                guarTime: `${hour}小时${minute}分钟`
            })
        }else{
            console.log('没有能量');
            this.setData({showInject: false})
            wx.showToast({
              title: '能量不足',
              icon: 'error'
            })
        }
    },
    // 关闭注入弹层
    closeEnergy(){this.setData({showScsEnergy:false})},
    getUserInfo(){
        req.getRequest('/api/user/curt',{}).then((res)=>{
            if(res.data.code===200){
                if (res.data.data.prayerStartTime) {
                    this.getQdTime(res.data.data)
                }

                // 获取可以祈祷的时间
                const pendantEnergy = res.data.data.crystallineEnergy
                const hours = Math.floor(pendantEnergy * 6 / 60); // 计算小时数
                const minute = pendantEnergy * 6 - hours * 60
                if(hours>0){
                    this.setData({
                        minutes:59
                    })
                }
                if(hours<=0){
                    this.setData({
                        minutes:minute
                    })
                }
    
                this.setData({
                    hours:hours,
                    minute:minute,
                    pendantEnergy:pendantEnergy
                })

                // 能量集满显示提示
                if(res.data.data.crystallineEnergy >= 100){
                    this.setData({
                        jmEnergy: true
                    })
                }

                this.setData({
                    userInfo:res.data.data,
                })

                // 判断运势加持是否结束
                const endSeconds = new Date(res.data.data.pendantLuckyEndTime)
                const nowSeconds = new Date()
                if (endSeconds > nowSeconds) {
                    this.getYsTime(res.data.data.pendantLuckyStartTime)
                }

                this.getXxObj()
            }
           }).catch((err)=>{
            console.log(err);
        })
    },

    // 计算运势已加持时间
    getYsTime(milliseconds){
        const statrSeconds = new Date(milliseconds)

        const ysTime = setInterval(() => {
            const nowSeconds = new Date()
    
            const nowTime = nowSeconds - statrSeconds
            
            const hours = Math.floor(nowTime / 1000 / 3600);
            const minutes = Math.floor(nowTime / 1000 / 60 - (hours * 60)) ;
            const seconds = Math.floor(nowTime / 1000 - (hours * 3600) - (minutes * 60));
          
            const formattedHours = String(hours).padStart(2, '0');
            const formattedMinutes = String(minutes).padStart(2, '0');
            const formattedSeconds = String(seconds).padStart(2, '0');
    
            const time = `${formattedHours}:${formattedMinutes}:${formattedSeconds}`
            this.setData({ydTime: time})
        }, 1000)

        this.setData({ysTime: ysTime})
    },
    // 计算祈祷时间
    getQdTime(data){
        clearInterval(this.data.qdTime)
        this.data.qdTime = setInterval(() => {
            // 获取已经祈祷时间
            const now = new Date();
            const startTime = new Date(data.prayerStartTime)
            const diff = now.getTime() - startTime.getTime();
            const hour = Math.floor(diff / (1000 * 60 * 60));
            const minutes = Math.floor((diff % (1000 * 60 * 60)) / (1000 * 60));
            const seconds = Math.floor((diff % (1000 * 60)) / 1000);
            const formattedTime = `${hour.toString().padStart(2, '0')}:${minutes.toString().padStart(2, '0')}:${seconds.toString().padStart(2, '0')}`;
            // 获取结束祈祷返回能量
            const nowTime = new Date();
            const endTime = new Date(data.prayerEndTime)
            const TimeDiff = endTime.getTime() - nowTime.getTime();

            // 判断是否正在祈祷
            if (data.isInPrayer) {
                this.setData({
                    prayTime: formattedTime,
                    energy: Math.floor(TimeDiff / 360000),
                })
            }
            console.log('定时器执行');

        }, 1000);
    },

    go2Jlai(){
        wx.redirectTo({
          url: '/pages/home/jl/jlai/jlai',
        })
    },
    btnOK(){
        const prayerEnergy = (this.data.pickerValue[0]*60 + this.data.pickerValue[1])/6
        if(this.data.pickerValue[0] === 0 && this.data.pickerValue[1] <= 5){
            return wx.showToast({
                title: '祈祷时间不能小于五分钟',
                icon: 'none'
            })
        }
        if(this.data.userInfo.crystallineEnergy < 1){
            return wx.showToast({
                title: '能量不足',
                icon: 'none'
            });
        }
        if(this.data.prayerContent === ''){
            return wx.showToast({
                title: '祈祷内容不能为空',
                icon: 'none'
            });
        }
        if(this.data.prayerContent.length > 11){
            return wx.showToast({
                title: '祈祷内容不能超过11个字',
                icon: 'none'
            });
        }
        req.patchRequest('/api/user/curt/prayer',{
            prayerContent:this.data.prayerContent,
            prayerEnergy:prayerEnergy
        }).then((res) => {

            if (res.data.code === 1002) {
                return wx.showToast({
                  title: 'Ta正在为你祈祷中，请在祈祷结束后再试试~',
                  icon: 'none'
                })
            }

            if(res.data.code === 200){
                wx.showToast({
                  title: '祈祷成功',
                  icon: 'success'
                })
            }

            this.getUserInfo()
            this.openPray()
        }).catch((err) => {
            console.log('祈祷失败',err);
        })
        this.setData({showTiming: false})
    },
    btnCancel(){
        // 更新数据后清除定时器
        clearInterval(this.data.qdTime)
        this.data.qdTime = null
        console.log('清除定时器');
        req.patchRequest('/api/user/curt/prayer/stop',{}).then((res)=>{
            if(res.data.code === 200){
                wx.showToast({
                    title: '已结束祈祷',
                    icon: 'success'
                  })

                this.setData({prayTime : '00:00:00'})
                this.openPray()
                this.getUserInfo()
            }else {
                wx.showToast({
                    title: '结束祈祷失败',
                    icon: 'error'
                })
            }
        })
    },
    btnShare(){
        if (this.data.loverInfo.crystallineEnergy === 100) {
            return this.setData({
                showEnergy:!this.data.showEnergy,
                showEnergyToast:!this.data.showEnergyToast,
                toast: '对方能量已经满啦~'
            })
        }
        if (this.data.userInfo.crystallineEnergy === 0) {
            return this.setData({
                showEnergy:!this.data.showEnergy,
                showEnergyToast:!this.data.showEnergyToast,
                toast: '你剩余的能量不足~'
            })
        }
        req.patchRequest('/api/user/curt/give-crystalline-energy-to-lover',{}).then((res)=>{
            console.log(res);
            if(res.data.code === 200){
                this.setData({
                    showEnergySuccess:!this.data.showEnergySuccess,
                    showEnergy:!this.data.showEnergy
                })
                this.getUserInfo()
                this.getUserLoverInfo()
                return setTimeout(()=>{
                    this.setData({
                        showEnergySuccess:!this.data.showEnergySuccess,
                    })
                },2000)
            }else if(res.data.code === 500){
                return this.setData({
                    showEnergy:!this.data.showEnergy,
                    showEnergyToast:!this.data.showEnergyToast,
                    toast: '对方能量已经满啦~'
                })
            }
        }).catch((err)=>{
            console.log('111');
            this.setData({
                showEnergyFail:!this.data.showEnergyFail,
                showEnergy:!this.data.showEnergy
            })
        })
    },

    // 切换轮播图
    goLeftSwiper(){
        if (this.data.swiperIndex === 0) {
            this.setData({swiperIndex: 2})
        }else {
            this.setData({swiperIndex: this.data.swiperIndex - 1})
        }
    },
    goRightSwiper(){
        if (this.data.swiperIndex === 2){
            this.setData({swiperIndex: 0})
        }else {
            this.setData({swiperIndex: this.data.swiperIndex + 1})
        }
    },
    swiperChange(e){
        this.setData({swiperIndex: e.detail.current})
    },

    /**
     * 生命周期函数--监听页面加载
     */
    onLoad(options) {
        this.getUserInfo()
        this.getUserLoverInfo()   
    },

    /**
     * 生命周期函数--监听页面初次渲染完成
     */
    onReady() {
        this.getXxObj()
    },

    /**
     * 生命周期函数--监听页面显示
     */
    onShow() {
        this.getUserInfo()
        this.getXxObj()
    },

    /**
     * 生命周期函数--监听页面隐藏
     */
    onHide() {
        this.getUserInfo()
        clearInterval(this.data.qdTime)
    },

    /**
     * 生命周期函数--监听页面卸载
     */
    onUnload() {
        this.getUserInfo()
        clearInterval(this.data.setInterval)
        clearInterval(this.data.qdTime)
    },

    /**
     * 页面相关事件处理函数--监听用户下拉动作
     */
    onPullDownRefresh() {

    },

    /**
     * 页面上拉触底事件的处理函数
     */
    onReachBottom() {

    },

    /**
     * 用户点击右上角分享
     */
    onShareAppMessage() {
    },
    
    ToastDialog(e) {
        this.setData({ visible: !this.data.visible });
    }
    ,
    onVisibleChange(e) {
    this.setData({
        visible: e.detail.visible,
    });
    }
})