// pages/scan_result/scan_result.js
let log = require('../../utils/log.js');
Page({

  /**
   * 页面的初始数据
   */
  data: {
    chargPile: null,
    orderid: null,
    userId: null,
    repaidbalance: 0,
    resultTable: [],
    // 是否减免停车费
    carParkingRate: false,
    // 停车时间
    parkTime: 0,
    url:'/images/scan_result.png',
    authStatus: 1,
    defPlateNumber:'',
    occupyFee:{},
    showOccupyFee:false
  },
  resetResultList(resultList){
    let that = this
    resultList.forEach(item=>{
      item["sumPrice"] = that.resetResultListSumPrice(item)
    })
  },
  resetResultListSumPrice(item){
 
    if(!item.elecPrice && item.elecPrice!=0){
      return '暂无费用'
    }
    if(!item.servicePrice && item.servicePrice!=0){
      return '暂无费用'
    }
    return parseFloat((item.elecPrice + item.servicePrice).toFixed(6))
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function (options) {
    let that = this;
    wx.getStorage({
      key: 'scan_chargpile',
      success: function (res) {
        console.log(res);
        //console.log(res.data);
        var chargPile = res.data;
        let authStatus = chargPile.authStatus
        let resultTable = chargPile.resultList
        that.resetResultList(resultTable)
        that.setData({
          resultTable,
          authStatus
        })
        chargPile.sharpTotalPrice = parseFloat((chargPile.sharpChargPrice + chargPile.sharpServicePrice).toFixed(6));
        chargPile.peakTotalPrice = parseFloat((chargPile.peakChargPrice + chargPile.peakServicePrice).toFixed(6));
        chargPile.flatTotalPrice = parseFloat((chargPile.flatChargPrice + chargPile.flatServicePrice).toFixed(6));
        chargPile.valleyTotalPrice = parseFloat((chargPile.valleyChargPrice + chargPile.valleyServicePrice).toFixed(6));
        chargPile.totalprice = parseFloat((chargPile.chargprice + chargPile.serviceprice).toFixed(6));
        that.setData({
          chargPile
        });
        //console.log(chargPile);

        // 更新是否减停车费
        that.execParking(that,chargPile)


        wx.removeStorage({
          key: 'scan_chargpile',
          success(res) {
            console.log(res);
          }
        });
        log.info('[扫码]', '[加载完成]', '[参数]', res.data);
		let userInfo = wx.getStorageSync('userInfo');
		wx.request({
		  url: getApp().globalData.postHeadAgreement + '/restapi/wechat/syncUser',
		  data: {
			loginName: userInfo.loginName
		  },
		  method: 'POST',
		  success: function (res) {
			let {
			  data
			} = res;
			log.info('[扫码]', '[同步用户数据]', '[响应]', data);
			console.info('[扫码]', '[同步用户数据]', '[响应]', data);
			if (data.code && data.code != 200) {
			  log.info('[扫码]', '[同步用户数据]', '[失败data null||data.code<>200跳转登陆界面]', data);
			} else {
			  that.setData({
				repaidbalance:data.repaidbalance
			  });
			}
		  },
		  fail(e) {
			console.log("用户数据同步失败");
			log.info('[扫码]', '[同步用户数据]', '[fail]', e);
		  }
    });
    



      }
    });
    this.getOccupyFee(options.chargPileId);
  },
  getOccupyFee(chargPileId){
    // test对象对接后端服务传递过来的数据
    this.selectOccupyFee(chargPileId)
    .then(result => {
      console.log("查询结果:", result);
        this.setData({
          occupyFee:result,
          showOccupyFee:true
        })
    })
    .catch(error => {
      console.error("查询失败:", error);
    });
  },
  async selectOccupyFee(chargPileId) {
    try {
      const res = await new Promise((resolve, reject) => {
        wx.request({
          url: `${getApp().globalData.postHeadAgreement}/restapi/wechat/queryOccupyFee`,
          data: {
            chargPileId: chargPileId
          },
          method: 'POST',
          success: (response) => {          
            resolve(response.data);
          },
          fail: (error) => {
            reject(error);
          }
        });
      });
      if (res.code == 200) {
        return res.result;
      } else {
        throw new Error(`Error: ${res.code}`);
      }
    } catch (e) {
      console.log("查询占位费模版信息异常", e);
      log.info('[扫码]', '[查询占位费模版信息]', '[fail]', e);
      throw e;
    }
  },
  execParking(that,chargPile){
    let stationId = chargPile.chargStationId;
    wx.request({
      url: getApp().globalData.postHeadAgreement + '/restapi/wechat/carParkingRate?stationId=' + stationId,
      // data: {
      // loginName: userInfo.loginName
      // },
      method: 'POST',
      success: function (res) {
        // 是否减免停车费
        // carParkingRate: false,
        // parkTime: 0,
        console.info(res)
        let reduceTime = res.data?.reduceTime;
        if(!reduceTime){
          that.setData({
            carParkingRate:false
          })
          return;
        }
        that.setData({
          carParkingRate:true
        })
        try{
          that.setData({
            parkTime: parseFloat((reduceTime/ 3600).toFixed(2))
          })
        }catch(e){
          that.setData({
            carParkingRate:false
          })
        }

      },
      fail(e) {
      console.log("用户数据同步失败");
      log.info('[扫码]', '[同步用户数据]', '[fail]', e);
      }
    });

  },

  beginChargeInner(that,plateNumber){
    let userInfo = wx.getStorageSync('userInfo');
    let isLogin = wx.getStorageSync('isLogin');
    // 扫码启动
    wx.showLoading({
      title: '开启充电中...',
      mask: true
    });
    log.info('[扫码]', '[开始充电流程]');
    //同步用户数据
    log.info('[扫码]', '[同步用户数据]', '[请求]', {
      loginName: userInfo.loginName
    });
    wx.request({
      url: getApp().globalData.postHeadAgreement + '/restapi/wechat/syncUser',
      data: {
        loginName: userInfo.loginName,
      },
      method: 'POST',
      success: function (res) {
        wx.hideLoading();
        let {
          data
        } = res;


        log.info('[扫码]', '[同步用户数据]', '[响应]', data);
        console.info('[扫码]', '[同步用户数据]', '[响应]', data);
        if (data.code && data.code != 200) {
          wx.removeStorageSync('userInfo');
          wx.removeStorageSync('isLogin');
          let url = '/pages/login/phone_login/phone_login';
          wx.redirectTo({
            url,
          });
          log.info('[扫码]', '[同步用户数据]', '[失败data null||data.code<>200跳转登陆界面]', data);
        } else {
          wx.setStorageSync('userInfo', data);
          wx.setStorageSync('isLogin', true);
          let repaidbalance = data.repaidbalance;
          that.setData({
            repaidbalance
          });
          //开始充电
          if(data.bindingPhone==0){
            wx.showModal({
              title: '提示',
              content: '您未绑定手机号,请重新登录后自动刷新绑定信息',
              confirmText: '去登录',
              showCancel:false,
              confirmColor:'#00AADD',
              success: function (res1) {
                if (res1.confirm) {
                  wx.removeStorageSync('userInfo');
                  wx.removeStorageSync('isLogin');
                  let url = '/pages/login/phone_login/phone_login';
                  wx.redirectTo({
                    url
                  })
                }
              }
            });
            log.info('[扫码]', '[同步用户数据]', '[未绑定手机号]', data);
          }else if (!data.repaidbalance || data.repaidbalance <= 0) {
            wx.showModal({
              showCancel: false,
              content: '余额不足,请充值!',
              confirmColor:'#00AADD',
              success: function (res) {
                if (res.confirm) {
                  let url = "/pages/chargemoney/chargemoney";
                  wx.navigateTo({
                    url
                  });
                }
              }
            });
            log.info('[扫码]', '[同步用户数据]', '[data.repaidbalance null||data.repaidbalance<=0余额不足跳转充值界面]', data);
          } else if (data.repaidbalance > 0 && data.repaidbalance <= 15) {
            wx.showModal({
              title: '余额:' + data.repaidbalance + '元',
              showCancel: false,
              confirmText: "去充值",
              confirmColor:'#00AADD',
              content: '余额过低,请尽快充值!',
              success: function (res) {
                if (res.confirm) {
                  let url = "/pages/chargemoney/chargemoney";
                  wx.navigateTo({
                    url
                  });
                }
              }
            });
            log.info('[扫码]', '[同步用户数据]', '[0<data.repaidbalance<=15余额过低]', data);

            // wx.showModal({
            //   title:'请选择',
            //   showCancel: true,
            //   confirmText:"继续充电",
            //   cancelText:"去充值",
            //   content: '余额过低,请尽快充值!',
            //   success: function (res) {
            //     if (res.confirm) {

            //       that.beginCharge_satrt();
            //     } else if (res.cancel) {
            //       let url = "/pages/chargemoney/chargemoney";
            //       wx.navigateTo({
            //         url
            //       });
            //     }
            //   }
            // });
          } else if (data.repaidbalance > 15) {
            log.info('[扫码]', '[同步用户数据]', '[余额充足开始充电]', data);
            that.beginCharge_satrt(plateNumber,1);
          }
        }
      }
    });
    // 扫描结束
  },
  beginChargeMsg(e){
    let that = this
    wx.requestSubscribeMessage({
      tmplIds: ['3FR5XRyycT81ZWMdVi_ZQYKJcVatZr2Tm7DgcLwCD1I','KWHBIONCrdumgTkE1dpIpAZRgrN5TuhpHuZ0uU-Eud4','XWj70eHMLAjLlufPuhE_NQmdSQzhrOwEXIblWveH0bk'],
      success (res33333) {
        that.beginCharge(e)
      },fail(reee){
        console.info("ffffffffffffff")
        console.info(reee)
      }
    })
  },
  beginCharge(e) {
    let that = this
    let userInfo = wx.getStorageSync('userInfo');
    let isLogin = wx.getStorageSync('isLogin');

    if(!that.data.carParkingRate){
      that.beginChargeInner(that,'');
      return;
    }
    // 读取默认车牌
    wx.request({
      url: getApp().globalData.postHeadAgreement + '/restapi/wechat/carList?loginName=' + userInfo.loginName,
      // data: {
      // loginName: userInfo.loginName
      // },
      method: 'POST',
      success: function (res) {
        let userCarList = res.data;
        userCarList = userCarList.filter(it=>it.defaultType==1);
        console.info(userCarList)
        if(userCarList.length==0 ){
          wx.showModal({
            title: '提示',
            content: '当前充电站可减免停车费,是否绑定车牌信息?',
            confirmText: '绑定车牌',
            cancelText: '直接启动',
            showCancel:true,
            confirmColor:'#00AADD',
            cancelColor:'#00AADD',
            success: function (ress1) {
              if(ress1.confirm){
                let url = '/pages/ucenter/car/chooseCar'
                wx.navigateTo({
                  url
                });
              }else{
                that.beginChargeInner(that,'')
              }
            }
          });
        }else{
          let userCar = userCarList[0]
          wx.showModal({
            title: '提示',
            content: '确定使用' + userCar.plateNumber + '车牌信息减免停车费?',
            confirmText: '确定',
            cancelText: '其他车牌',
            showCancel:true,
            confirmColor:'#00AADD',
            cancelColor:'#00AADD',
            success: function (ress1) {
                if(ress1.confirm){
                  that.beginChargeInner(that,userCar.plateNumber)
                }else{
                  let url = '/pages/ucenter/car/chooseCar'
                  wx.navigateTo({
                    url
                  });
                }
                return;

            },
            fail: function(res1){
              console.info(res1)
            }
          });
        }

      },
      fail(e) {
      console.log("查询车辆失败");
      log.info('[查询车辆]','[fail]', e);
      }
    });
  
  
  },
  beginCharge_satrt(plateNumber,runTimes) {
    wx.showLoading({
      title: '开启充电中...',
      mask: true
    });

    let that = this;
    let terminalNum = this.data.chargPile.chargPileId;

    let userInfo = wx.getStorageSync('userInfo');
    let isLogin = wx.getStorageSync('isLogin');

    console.log(terminalNum);
    let userId = userInfo.userId;
    let chargstarttime = new Date().getTime();
    console.log(chargstarttime);
    log.info('[扫码]', '[开始充电]', '[请求]', {
      //chargPileId: '201811010000004202',
      chargPileId: terminalNum,
      userId: userId,
      chargstarttime: chargstarttime
    });
    wx.request({
      url: getApp().globalData.postHeadAgreement + '/restapi/pileLog/miniprogramadd',
      data: {
        //chargPileId: '201811010000004202',
        chargPileId: terminalNum,
        userId: userId,
        chargstarttime: chargstarttime,
        userPlateNumber: plateNumber,
        runTimes:runTimes
      },
      method: 'POST',
      fail(e) {

        wx.hideLoading();
        //开启充电失败,提示用户
        wx.showModal({
          showCancel: false,
          content: '开启充电失败',
          confirmColor:'#00AADD',
        });
        log.info('[扫码]', '[开始充电]', '[fail]', e);
      },
      success(res) {
        wx.hideLoading();
        let {
          data
        } = res;
        log.info('[扫码]', '[开始充电]', '[响应]', data);
        if (data && data.code == 200) {
          //if (data && data.code == 200 && data.orderid) {
          //开启充电成功,跳转到正在充电界面
          let {
            orderid
          } = data;
          log.info('[扫码]', '[开始充电]', '[成功,跳转充电中页面]', data);
          //console.log(this.data.city);
          let url = `/pages/charging/charging?orderid=${orderid}&userId=${userId}&chargPileId=${terminalNum}`;
          wx.redirectTo({
            url
          });
        } else if (data && data.code == 501) {
          //开启充电失败,提示用户
          wx.showModal({
            showCancel: false,
            content: '余额不足,请充值!',
            confirmColor:'#00AADD',
          });
          log.info('[扫码]', '[开始充电]', '[失败data.code=501余额不足]', data);
        } else if (data && data.code == 502) {
          //开启充电失败,提示用户
          wx.showModal({
            showCancel: false,
            content: data.message,
            confirmColor:'#00AADD',
          });
          log.info('[扫码]', '[开始充电]', '[失败data.code=502' + data.message + ']', data);
        } else if (data && data.code == 503) {
            //开启充电失败,提示用户
            let msg = res?.data?.message
            wx.showModal({
                title: '提示',
                showCancel: true,
                content: msg,
                cancelText:'其他车辆',
                confirmText:'继续启动',
                confirmColor:'#00AADD',
                cancelColor:'#00AADD',
                success: function (res) {
                    if (res.cancel) {
                       //点击取消,其他车辆
                    } else {
                       //点击确定,继续启动
                       that.beginCharge_satrt(plateNumber,runTimes + 1)
                    }
                 },
                 fail: function (res) { },//接口调用失败的回调函数
                 complete: function (res) { },//接口调用结束的回调函数(调用成功、失败都会执行)
              });
            log.info('[扫码]', '[开始充电]', '[失败data.code=502' + data.message + ']', data);
        } else {
          //开启充电失败,提示用户
          let msg = res?.data?.message
          msg = msg?msg:'开启充电失败'
          wx.showModal({
            showCancel: false,
            content: msg,
            confirmColor:'#00AADD',
          });
          log.info('[扫码]', '[开始充电]', '[失败]', data);
        }
      }
    });
  },
  previewImage(e){
    let cur = e.target.dataset.src;//获取本地一张图片链接
    console.info(cur)
    wx.previewImage({
        current: cur, //字符串,默认显示urls的第一张
          urls: [cur] // 数组,需要预览的图片链接列表
    })
},
  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function () {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow: function () {
    let car = wx.getStorageSync('chooseCar_plateNumber')
    let plateNumber = ''
    if(car){
        plateNumber = car.plateNumber;
        wx.removeStorageSync('chooseCar_plateNumber')
    }
    this.setData({
        plateNumber
    })
    console.info('将会自动跳过弹窗,默认车牌号:' + plateNumber)

    if(car){
        this.beginChargeInner(this,plateNumber)
    }
  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide: function () {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload: function () {

  },

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

  },

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

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage: function () {

  }
})