const app = getApp()
const baseUrl = app.globalData.baseUrl
const md5 = require('js-md5');

// page/component/orders/orders.js
Page({
  onLoad: function (options) {
    const orders = {
      goodsId: options.goodsId,
      title: options.title,
      price: options.price,
      num: options.num,
      image: options.image,
      specs: options.specs
    }
    this.setData({ orders })
    console.log(this.data.orders)
  },
  data: {
    address: {},
    hasAddress: false,
    total: 0,
    orders: {},
    config: {
      appid: "wx865aefa5a7115ae0",
      key: "d5a58d44588b42cbbe01daa5cfa4e792"
    },
    notes: ""
    // {id:1,title:'新鲜芹菜 半斤',image:'/image/s5.png',num:4,price:0.01},
    // {id:2,title:'素米 500g',image:'/image/s6.png',num:1,price:0.03}
  },

  onReady() {
    this.getTotalPrice()
  },

  onShow: function () {
    const self = this
    wx.getStorage({
      key: "address",
      success(res) {
        self.setData({
          address: res.data,
          hasAddress: true,
        })
      },
    })
  },

  handleInput(e) {
    this.setData({
      notes: e.detail.value
    });
  },
  /**
   * 计算总价
   */
  getTotalPrice() {
    let orders = this.data.orders
    let total = 0
    total += orders.num * orders.price
    this.setData({
      total: total,
    })
  },
  timeStamp: function () {
    return parseInt(new Date().getTime() / 1000) + ''
  },
  /* 随机数 */
  randomString: function () {
    var chars = 'A2345678';
    var maxPos = chars.length;
    var pwd = '';
    for (var i = 0; i < 32; i++) {
      pwd += chars.charAt(Math.floor(Math.random() * maxPos));
    }
    return pwd;
  },
  toPay() {
    const self = this;
    const orderData = this.data.orders;
    wx.request({
      url: baseUrl + "/user/getById",
      method: "GET",
      data: {
        openId: wx.getStorageSync('openid'),
      },
      success(res) {
        if (res.data.data.address != null && res.data.data.address != "" && res.data.data.phone != null && res.data.data.phone != "") {
          // 假设用户ID暂时写死
          orderData.openId = wx.getStorageSync('openid');
          orderData.status = 1;
          orderData.notes = self.data.notes;
          console.log("orderData", orderData)
          // 生成订单并请求支付
          wx.request({
            url: baseUrl + "/order/addOrUpdate", // 替换为你的后端API地址
            method: "POST",
            data: {
              ...orderData,
            },
            header: {
              "Content-Type": "application/json", // 设置请求头
            },
            success(res) {
              if (res.statusCode === 200) {
                console.log(res)
                wx.cloud.init({
                  env: 'zdt2024-9g7pr48u64f887f0', //填上你的云开发环境id
                  traceUser: true,
                });
                const randomString = self.randomString();
                const outTradeNo = res.data.data.orderCode
                const orderId = res.data.data.id
                wx.cloud.callFunction({
                  name: "pay",
                  data: {
                    nonceStr: randomString, //随机字符串,String(32)
                    outTradeNo: outTradeNo, //商户订单号,String(32)
                    totalFee: self.data.total * 100, //Int
                  },
                  success: res => {
                    console.log('下单结果: ', res);
                    // 获取到预付单信息
                    const payment = res.result.payment
                    wx.hideLoading();
                    // 唤起微信支付组件，完成支付
                    wx.requestPayment({
                      ...payment, //把payment展开
                      success(res) {
                        // 支付成功回调，实现自定义的业务逻辑
                        console.log('唤起支付组件成功：', res);
                        // 将订单的status改为已支付
                        orderData.status = 2;
                        orderData.id = orderId;
                        wx.request({
                          url: baseUrl + "/order/addOrUpdate", // 替换为你的后端API地址
                          method: "POST",
                          data: {
                            ...orderData,
                          },
                          header: {
                            "Content-Type": "application/json", // 设置请求头
                          },
                          success(res) {
                            wx.showToast({
                              title: "订单支付成功",
                              icon: "success",
                              duration: 2000,
                            });
                            wx.switchTab({
                              url: '/page/component/index',  // 替换为你的首页路径
                            });
                          }
                        })
                      },
                      fail(err) {
                        // 支付失败回调
                        console.error('唤起支付组件失败：', err);
                        // 将订单的status改为已关单
                        orderData.status = 0;
                        orderData.id = orderId;
                        wx.request({
                          url: baseUrl + "/order/addOrUpdate", // 替换为你的后端API地址
                          method: "POST",
                          data: {
                            ...orderData,
                          },
                          header: {
                            "Content-Type": "application/json", // 设置请求头
                          },
                          success(res) {
                            wx.showToast({
                              title: "订单支付成功",
                              icon: "success",
                              duration: 2000,
                            });
                            wx.switchTab({
                              url: '/page/component/index',  // 替换为你的首页路径
                            });
                          }
                        })
                        wx.showToast({
                          title: "支付失败",
                          icon: "error",
                          duration: 2000,
                        });
                      }
                    });
                  },
                  fail: err => {
                    console.log(err)
                  }
                })
              }
            }
          })
        } else {
          wx.showToast({
            title: "请填写收货信息",
            icon: "error",
            duration: 2000,
          });
        }
      }
    })
  }
})
