const {
  default: api
} = require("../../js/api");
const util = require('../../utils/util.js')

// pages/historyOrderAfter/historyOrderAfter.js
Page({

  /**
   * 页面的初始数据
   */
  data: {
    orders: [
      {
        order:{
          status: '未支付',
          statusColor: '#ff8d1a',
          oilName: "hk",
          nozzle: "1",
          volume: "1",
          amount: "1",
          payAmount: "1",
          discount: "1",
          orderId: "1",
          time: "2025-4-3",
          price:'666'
        },
        bottonText2: ""
      }
    ],
    date: '',
    startDate: '',
    endDate: '',
    pageNum: 1,//查询页码
    pageSize: 5,//页数
    isHaveOrder: true,//是否还有订单
    paymentMode: -1,
    /** 后支付订单状态  订单状态(0:未支付; 1:已支付; 2:订单全额退款;3:订单部分退款;5:已完成)*/
    payStatusValue: [{
      orderStatus: 0,
      status: '未支付',
      statusColor: '#ff8d1a'
    },
    {
      orderStatus: 1,
      status: '已完成',
      statusColor: '#a6a6a6'
    },
    {
      orderStatus: 5,
      status: '已完成',
      statusColor: '#a6a6a6'
    }
    ],
    /** 预支付订单状态 授权状态(未授权:0;已授权:1)
     * + 订单状态(0:未支付; 1:已支付; 2:订单全额退款;3:订单部分退款;5:已完成) */
    prepayStatuValue: [
      {
        authorizationStatus: 0,
        orderStatus: 0,
        status: '支付失败',
        statusColor: '#f1912f'
      },
      {
        authorizationStatus: 0,
        orderStatus: 1,
        status: '授权失败',
        statusColor: '#f0d02e'
      },
      {
        authorizationStatus: 1,
        orderStatus: 1,
        status: '授权成功',
        statusColor: '#a2cd4a'
      },
      {
        authorizationStatus: 0,
        orderStatus: 2,
        status: '已完成',
        statusColor: '#a6a6a6'
      },
      {
        authorizationStatus: 0,
        orderStatus: 3,
        status: '已完成',
        statusColor: '#a6a6a6'
      },
      {
        authorizationStatus: 0,
        orderStatus: 5,
        status: '已完成',
        statusColor: '#a6a6a6'
      },
    ],

  },



  /** 获取当前日期 */
  getNowDate() {
    const date = new Date(); // 获取当前日期
    const year = date.getFullYear(); // 获取年份
    const month = String(date.getMonth() + 1).padStart(2, '0'); // 获取月份,补零
    const day = String(date.getDate()).padStart(2, '0'); // 获取日期,补零

    return `${year}-${month}-${day}`; // 拼接成 yyyy-MM-dd 格式
  },
  /** 获取上个月日期 */
  getLastMouthDate() {
    const currentDate = new Date(); // 获取当前日期
    const year = currentDate.getFullYear(); // 当前年份
    const month = currentDate.getMonth(); // 当前月份(0-11)
    const day = currentDate.getDate(); // 当前日期

    // 计算一个月前的日期
    const oneMonthAgoDate = new Date(year, month - 1, day);

    // 处理跨年问题(如果当前月份是 1 月,month - 1 会是 0,即上一年的 12 月)
    // 无需额外处理,Date 对象会自动处理

    // 格式化日期为 YYYY-MM-DD
    const formattedDate = `${oneMonthAgoDate.getFullYear()}-${String(oneMonthAgoDate.getMonth() + 1).padStart(2, '0')}-${String(oneMonthAgoDate.getDate()).padStart(2, '0')}`;

    return formattedDate;
  },

  /** 计算倒计时,倒计时结束后发起取消授权 */
  startCountdow() {
    this.timer = setInterval(() => {
      const countDownZeroOrders = []
      const orders = this.data.orders.map(order => {
        if (order.countdown && order.countdown != '0') {
          const currentCountDown = (Number(order.countdown) - 1);
          order.countdown = currentCountDown.toString();
          if (currentCountDown <= 0) countDownZeroOrders.push(order)
        }
        return order
      })

      this.setData({
        orders: orders
      })
      this.toUnAnthorization(countDownZeroOrders)
    }, 1000);
  },

  /** 结束倒计时 */
  endCountDown() {
    if (this.timer) {
      clearInterval(this.timer)
      this.timer = null
    }
  },
  /** 发送取消授权 */
  toUnAnthorization(orders) {
    console.log(orders)
  },
  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    const today = this.getNowDate();
    const lastMouthDay = this.getLastMouthDate();
    this.setData({
      // date: today,
      paymentMode: options.paymentMode,
      startDate: today,
      endDate: lastMouthDay
    });
    console.log("历史页当前data", this.data)

    

    // this.startCountdow();
  },

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

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

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

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {
    this.endCountDown()
  },

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

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {
    if (!this.data.isHaveOrder) return;
    var page = this.data.pageNum + 1;
    this.setData({
      pageNum: page
    })
    this.getOrder()
  },

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

  },

  /** 日期选择器选择时间 */
  bindDateChange(date) {
    this.setData({
      date: date.detail.value,
      orders: []
    });
    console.log(date)
    this.getOrder()
  },

  /** 组件按钮一点击事件 */
  onOrderButtonClick1(event) {
    console.log(event)
    const order = event.detail.order;
    const message = event.detail.event;
    if (message == "退款") {
      wx.showLoading({
        title: '正在退款',
      })
      api.request_RefundTrx({ "trxId": order.orderId }).then(res => {
        console.log("退款", res)
        wx.hideLoading()
        if (res.data.statusCode == 200) {
          return util.subAndsendMessage(order.orderId, "退款")
        } else {
          wx.showToast({
            title: res.data.message,
          })
        }
      }).then(res => {
        this.refreshOrder();
      })
        .catch(err => {
          console.log("退款失败", err)
          wx.hideLoading()
        })
    }
  },

  /** 组件按钮二点击事件 */
  onOrderButtonClick2(event) {
    console.log(event)
    if (event.detail.event == "重新授权") {
      this.toAuthorization(event.detail.order.orderId)
    }
  },

  /** 授权 */
  toAuthorization(orderId) {
    const that = this;
    wx.showLoading({
      title: '授权中',
    })
    api.request_NozzleAuthorization(orderId).then(res => {
      console.log("授权", res)
      wx.hideLoading()
      if (res.data.statusCode == 200) {
        that.refreshOrder()
      } else {
        wx.showToast({
          title: '授权失败',
        })
      }
    }).catch(err => {
      console.log("授权报错", err)
      wx.showToast({
        title: '授权失败',
      })
    })
  },

  /** 获取订单 */
  getOrder() {
    wx.showLoading({
      title: '获取订单中',
    })
    const that = this;
    api.request_WXFindOrders(this.data.date, this.data.pageNum, this.data.pageSize).then(res => {
      wx.hideLoading()
      // api.request_WXFindOrders(this.data.date, 3, 5).then(res => {
      console.log("获取历史订单", res)
      let datas = res.data.data;
      if (datas.length <= 0) {
        that.data.isHaveOrder = false;
        return
      }
      var getOrders = that.turnOnOrder(datas)

      var orderList = [...this.data.orders, ...getOrders]
      this.setData({
        orders: orderList
      })

      console.log("转换后的订单", this.data.orders)
    }).catch(err => {
      wx.hideLoading()
      console.log("获取历史订单失败", err)
      wx.showModal({
        title: '提示',
        content: '获取订单失败',
      })
    })
  },

  /** 打包订单信息 */
  turnOnOrder(orders) {
    const that = this;
    var getOrders = orders.map(order => {
      //获取订单时间
      var times = [order.authorizationTime, order.createTime, order.fuelItemTransactionEndTime, order.transactionTime];
      var timeFormate = times.find(t => t != undefined && t != null && t != '');
      var time = util.formatDateNotSecond(timeFormate);

      //获取订单升数
      var volume = (order.originalQty != null && order.originalQty != undefined) ? order.originalQty : order.qty

      //获取订单状态
      var status = undefined;
      //根据不同的模式获取订单状态值
      if (that.data.paymentMode == 0) {
        status = that.data.payStatusValue.find(state => state.orderStatus == order.orderStatus)
      } else {
        status = that.data.prepayStatuValue.find(state =>
          state.authorizationStatus == order.authorizationStatus &&
          state.orderStatus == order.orderStatus
        )
      }

      var stute = '';
      var stateColor = '';
      var bt1 = ''
      var bt2 = ''
      if (status != undefined) {
        stute = status.status
        stateColor = status.statusColor
      }
      if (that.data.paymentMode == 0) {
        if (stute == '未支付') bt2 = '重新支付';
        return {
          order: {
            status: stute,
            statusColor: stateColor,
            oilName: order.productName,
            nozzle: order.nozzleId,
            volume: volume,
            amount: order.originalAmount,
            payAmount: order.actualPaymentAmount,
            discount: order.originalAmount - order.actualPaymentAmount,
            orderId: order.id,
            time: time,
            price: order.price
          },
          bottonText2: bt2
        }
      } else {
        if (stute == "授权成功") bt2 = "请尽快提枪"
        if (stute == "支付失败") {
          bt1 = "取消"
          bt2 = "继续支付"
        }
        if (stute == "授权失败") {
          bt1 = "退款"
          bt2 = "重新授权"
        }
        return {
          order: {
            status: stute,
            statusColor: stateColor,
            oilName: order.productName,
            nozzle: order.nozzleId,
            volume: volume,
            amount: order.originalAmount,
            payAmount: order.actualPaymentAmount,
            discount: order.originalAmount - order.actualPaymentAmount,
            refund: order.refundAmount,
            orderId: order.id,
            time: time
          },
          bottonText1: bt1,
          bottonText2: bt2
        }
      }
    })

    return getOrders;
  },

  /** 刷新订单 */
  refreshOrder() {
    this.setData({
      date: '',
      orders: []
    });
    console.log(this.data.date)
    this.getOrder()
  }
})