// pages/applyRefund/applyRefund.js
var http = require('../../utils/http.js');
var big = require('../../utils/big.min.js');
Page({

  /**
   * 页面的初始数据
   */
  data: {
    refundType: 2,  // 退款类型 1整单  2单个物品
    // 货物状态
    goodsStateArray: ['未收到货', '已收到货'],
    isReceiver: 0, //货物状态(1:已收到货 0:未收到货)

    //  退款原因（已收到货）
    refundProdReasonArray: ['请选择', '拍错/多拍/不喜欢', '协商一致退款', '商品破损/少件', '商品与描述不符', '卖家发错货', '质量问题', '其他'],
    // 退款原因（未收到货）
    refundPriReasonArray: ['请选择', '协商一致退款', '拍错/多拍/不喜欢', '商家一直未发货/快递一直未送达', '其他'],
    buyerReason: 0, //退款原因


    refundItem: {}, //订单项数据
    orderItemId: '', //订单项ID（单个物品退款时使用）
    orderNumber: '', //订单编号

    applyType: 1, //退款方式(1:仅退款 2退款退货)
    goodsNum: 1, //退货数量（0或不传值则为全部数量）
    // quantity: 1,  //退货数量
    refundAmount: 0, //实际退款金额
    maxRefundAmount: 0, //最大退款金额
    buyerMobile: '', //手机号码（默认当前订单手机号码）
    buyerDesc: '', //备注说明
    photoFiles: [], //凭证图片列表
    actualTotal: 0,  //总额
    isLastProd: false,  //是否最后一样商品
    prodPrice: 0,  //商品单价

    addTransfee: false, //是否可以加运费（仅一件商品）
    orderScore: 0, // 整单使用积分

    showNumAndCont: '', // 金额、积分、运费的展示（最多可退）
    showPriAndScore: '', // 金额、积分、运费的展示（金额+积分）
    
  },

  /**
   * 金额、积分、运费的展示
   * 
   * refundType: 退款单类型（1:整单退款,2:单个退款）
   * applyType: 退款方式(1:仅退款 2退款退货)
   * refundAmount: 实际退款金额
   * actualTotal: 总额
   * orderScore: 使用积分
   * refundItem.status == 2 待发货
   * refundItem.transfee 运费
   * isLastProd：是否最后一个订单项item
   */
  showNumber: function() {
    var refundItem = this.data.refundItem
    var refundAmount = this.data.refundAmount
    var refundType = this.data.refundType
    var actualTotal = this.data.actualTotal
    var orderScore = this.data.orderScore
    var isLastProd = this.isLastProd
    var showNumAndCont = ''
    var showPriAndScore = ''
    // 待发货
    if(refundItem.status == 2) {
      // 有金额，无运费，无积分
      if(refundAmount > 0 && (!refundItem.transfee || refundItem.transfee == 0) && (!orderScore || orderScore == 0)){
        // 单个退 || 整单退
        if(refundType == 2 || refundType == 1) {
          showNumAndCont = '￥' + refundAmount
          showPriAndScore = '￥' + refundAmount
        }
      }
      // 有金额，有运费，无积分
      if(actualTotal > 0 && (refundItem.transfee && refundItem.transfee > 0) && (!orderScore || orderScore == 0)) {
        if(isLastProd && refundType == 2) { 
          // 单个退 && 最后一个订单项
          showNumAndCont = '￥' + actualTotal + '+运费' + '￥' + refundItem.transfee // 最多可退
          showPriAndScore = '￥' + refundAmount // 显示金额+积分
        }else { // （单个退 && 不是最后一个订单项） || 整单退
          showNumAndCont = '￥' + refundAmount // 最多可退
          showPriAndScore = '￥' + refundAmount // 显示金额+积分
        }
      }
      //有金额，有运费，有积分
      if(actualTotal > 0 && (refundItem.transfee && refundItem.transfee > 0) && (orderScore || orderScore > 0)) {
        if(isLastProd && refundType == 2) { 
          // 单个退 && 最后一个订单项
          showNumAndCont = '￥' + actualTotal + '+运费' + '￥' + refundItem.transfee + '+' + orderScore + '积分' // 最多可退
          showPriAndScore = '￥' + refundAmount +  '+' + orderScore + '积分' // 显示金额+积分
        }else { // （单个退 && 不是最后一个订单项） || 整单退
          showNumAndCont = '￥' + refundAmount + '+' + orderScore + '积分' // 最多可退
          showPriAndScore = '￥' + refundAmount +  '+' + orderScore + '积分' // 显示金额+积分
        }
      }
      //无金额，无运费，有积分
      if((!refundAmount || refundAmount == 0) && (!refundItem.transfee || refundItem.transfee == 0) && (orderScore && orderScore > 0)) {
        // 单个退 || 整单退
        if(refundType == 2 || refundType == 1){
          showNumAndCont =  orderScore + '积分'
          showPriAndScore = orderScore + '积分'
        }
      }
      //无金额，有运费，有积分
      if((!refundAmount || refundAmount == 0)&& (refundItem.transfee && refundItem.transfee > 0) && (orderScore && orderScore > 0)) {
        // 单个退 || 整单退
        if(refundType == 2 || refundType == 1){
          showNumAndCont = '运费' + '￥' + refundItem.transfee + '+' + orderScore + '积分'
          showPriAndScore = '￥' + refundItem.transfee + '+' + orderScore + '积分'
        }
      }
      console.log('待发货(最多可退)：',showNumAndCont)
      console.log('待发货(金额+积分)：',showPriAndScore)

    };

    // 非待发货（已发货 || 已完成）任何情况都不退运费
    if(refundItem.status != 2) {
      // 有金额，无运费，无积分
      if(refundAmount > 0 && (!refundItem.transfee || refundItem.transfee == 0) && (!orderScore || orderScore == 0)){
        // 单个退 || 整单退
        if(refundType == 2 || refundType == 1) {
          showNumAndCont= '￥' + refundAmount
          showPriAndScore = '￥' + refundAmount
        }
      }
      // 有金额，有运费，无积分
      if(refundAmount > 0 && (refundItem.transfee && refundItem.transfee > 0) && (!orderScore || orderScore == 0)) {
        // 单个退 || 整单退
        if(refundType == 2 || refundType == 1) {
          showNumAndCont = '￥' + refundAmount
          showPriAndScore = '￥' + refundAmount
        }
      }
      //有金额，有运费，有积分
      if(refundAmount > 0 && (refundItem.transfee && refundItem.transfee > 0) && (orderScore || orderScore > 0)) {
        // 单个退 || 整单退
        if(refundType == 2 || refundType == 1){
          showNumAndCont = '￥' + refundAmount + '+' + orderScore + '积分'
          showPriAndScore = '￥' + refundAmount + '+' + orderScore + '积分' // 显示金额+积分
        }
      }
      //无金额，无运费，有积分
      if((!refundAmount || refundAmount == 0) && (!refundItem.transfee || refundItem.transfee == 0) && (orderScore && orderScore > 0)) {
        // 单个退 || 整单退
        if(refundType == 2 || refundType == 1){
          showNumAndCont =  orderScore + '积分'
          showPriAndScore = orderScore + '积分' // 显示金额+积分
        }
      }
      //无金额，有运费，有积分
      if((!refundAmount || refundAmount == 0)&& (refundItem.transfee && refundItem.transfee > 0) && (orderScore && orderScore > 0)) {
        // 单个退 || 整单退
        if(refundType == 2 || refundType == 1){
          showNumAndCont = orderScore + '积分'
          showPriAndScore = orderScore + '积分' // 显示金额+积分
        }
      }
      console.log('已发货(最多可退)：',showNumAndCont)
      console.log('已发货(金额+积分)：',showPriAndScore)
    }
    this.setData({
      showNumAndCont,
      showPriAndScore
    })
    console.log('最多可退showNumAndCont:',this.data.showNumAndCont)
    console.log('金额+积分showPriAndScore:',this.data.showPriAndScore)
  },

  /**
   * 退款原因选择
   * refundType:  退款类型 1整单  2单个物品
   * refundItem.status: 2待发货
   * isReceiver: 货物状态(1:已收到货 0:未收到货)
   * applyType:  1仅退款 2退货退款
   */
  returnReasonList: function() {
    if(this.data.applyType == 2) {
      this.setData({
        isReceiver: 1 // 已收到货
      })
    }else {
      this.setData({
        isReceiver: 0 // 已收到货
      })
    }
    console.log('isReceiver货物状态(1:已收到货 0:未收到货)',this.data.isReceiver)
  },


  /**
   * 货物状态picker选择
   */
  goodsStateArray: function(e) {
    console.log('货物状态', e.detail.value)
    this.setData({
      isReceiver: e.detail.value,
      buyerReason: 0
    })
  },

  /**
   * 退款原因picker选择
   */
  refundReasonChange: function(e) {
    console.log('退款原因', e.detail.value)
    this.setData({
      buyerReason: e.detail.value
    })
  },


  /**
   * 生命周期函数--监听页面加载
   */
  onLoad: function(options) {
    console.log(options,'----参数');
    // 拿到上一页的参数type（判断退款方式）
    // console.log('type：',options.type)
    if (options.type) {
      this.setData({
        applyType: options.type  // 1仅退款 2退货退款
      })
      // console.log(this.data.type)
    }
    // console.log('refundType：',options.refundType)
    this.setData({
      refundType: options.refundType  // 退款类型 1整单  2单个物品
    })
    console.log('refundType（退款类型 1整单  2单个物品）',this.data.refundType)

    this.getRefundProdInfo()  //获取退款商品信息
  },

  /**
   * 获取退款商品信息
   */
  getRefundProdInfo: function() {
    let refundType = this.data.refundType  // 退款类型 1整单  2单个物品
    //拿到缓存里的订单项数据
    var refundItem = wx.getStorageSync("refundItem");
    console.log('拿到缓存里的订单项数据refundItem:',refundItem)
    this.setData({
      refundItem: refundItem,
      orderNumber: refundItem.orderNumber,
      goodsNum: refundItem.prodCount,
      actualTotal: refundItem.actualTotal,  //总额
      isLastProd: refundItem.isLastProd,  //是否最后一样商品
      addTransfee: refundItem.addTransfee, //只有一件商品可以退运费
      orderScore: refundItem.useScore // 单个退积分
    })
    console.log('单个退orderScore:',this.data.orderScore)
    // console.log('platformShareReduce：',this.data.refundItem.platformShareReduce)
    // console.log(refundItem.isLastProd)
    if(refundType == 1) {  //整单退款
      this.setData({
        orderItemDtos: refundItem.orderItemDtos, //商品列表
        orderScore: refundItem.orderScore,  //整单积分
      });
      console.log('整单退orderScore:',this.data.orderScore)
    }
    let actualTotal = this.data.actualTotal  //商品总额（不含运费）
    let prodCount = refundItem.prodCount  //商品总数
    // console.log('商品总数prodCount',prodCount)
    // console.log('商品总额（不含运费）actualTotal',actualTotal)
    if(refundType == 2) {  //单个退
      // 计算商品单价
      if(prodCount > 0) {
        var x = new big(actualTotal)
        var y = new big(prodCount)
        // 保留两位小数
        big.DP = 2
        // 向下取整
        big.RM = 1
        let prodPrice = x.div(y).valueOf()  //商品单价
        this.setData({
          prodPrice
        })
        // console.log(this.prodPrice)
      }
    }
    
    this.returnReasonList() // 退款原因选择列表展示
    this.refundAmount() //退款金额计算
    
  },
  /**
   * 退款金额计算
   */
  refundAmount: function() {
    let actualTotal = this.data.actualTotal
    // console.log('总额this.data.actualTotal：',this.data.actualTotal)
    let refundItem = this.data.refundItem
    // console.log('商品item,this.data.refundItem：',this.data.refundItem)
    let refundType = this.data.refundType  // 退款类型 1整单  2单个物品
    
    // console.log('refundType退款类型 1整单  2单个物品：',this.data.refundType)
    // console.log('addTransfee是否可加运费：',this.addTransfee)
    if (refundItem.status == 2) { //待发货状态
      if(refundType == 2) {  //单个退,
        if(refundItem.isLastProd) {  //如果是最后一个可退运费（actualTotal总额不包含运费）
          this.setData({
            refundAmount: actualTotal + refundItem.transfee,
          });
          // console.log('运费：',refundItem.transfee,'+总额：',actualTotal)
          // console.log('待发货单个退（最后一个）金额：',this.data.refundAmount)
        }else { //否则不退
          this.setData({
            refundAmount: actualTotal,
          });
          if(this.addTransfee) { // 如果是只有一个商品，可退运费
            this.setData({
              refundAmount: actualTotal + refundItem.transfee,
            });
            // console.log('单个退加运费可退总额:',this.refundAmount)
          }
          // console.log('运费：',refundItem.transfee,'+总额：',actualTotal)
          // console.log('待发货单个退（不是最后一个）金额：',this.data.refundAmount)
        }
      } else if(refundType == 1) {  //整单退，退实际金额（actualTotal总额包含运费）
        this.setData({
          refundAmount: actualTotal,
        });
        // console.log('运费：',refundItem.transfee)
        // console.log('待发货整单退金额：',this.data.refundAmount)
      }
    } else if (refundItem.status != 2) { // 已发货订单（整单退运费（总额包含运费）；单个不退运费（总额不包含运费））
       this.setData({
         refundAmount: actualTotal,
       });
      //  console.log('运费：',refundItem.transfee)
      //  console.log('已发货整单退金额：',this.data.refundAmount)
    }

    this.showNumber() // 金额、积分、运费的显示
  },

    /**
     * 改变商品数量重新计算价格（数量加减）
     */
    changePordNum(e) {
      var st = e.currentTarget.dataset.st;
      let actualTotal = this.data.actualTotal  //商品总额（不含运费）
      var prodCount = this.data.refundItem.prodCount  //商品总数
      if(st == 0){
        var goodsNum = this.data.goodsNum - 1 //展示的商品总数
      }else if(st == 1) {
        var goodsNum = this.data.goodsNum + 1 //展示的商品总数
      }
      if(goodsNum < 1) {
        wx.showToast({
          title: '退货数量不能小于1！',
          icon: 'none',
        })
        return
      }
      if(goodsNum > prodCount) {
        wx.showToast({
          title: '退货数量不能大于订单商品数量！',
          icon: 'none',
        })
        return
      }
      big.DP = 2
      // big.RM = 0
      this.setData({
        goodsNum,
        refundAmount: new big(actualTotal).times(goodsNum).div(prodCount).valueOf()
      })
    },



  /**
   * 上传图片
   */
  getUploadImg: function(e) {
    var idx = e.target.dataset.idx
    // console.log(idx);
    var ths = this;
    wx.chooseMedia({
      count: 1, // 默认9
      mediaType: ['image'],
      sourceType: ['album', 'camera'],
      maxDuration: 30,
      success: function(res) {
        // 图片的本地临时文件路径列表
        var tempFilePaths = res.tempFiles[0].tempFilePath;
        wx.showLoading({
          mask: true
        })
        var params = {
          url: "/p/file/upload",
          filePath: tempFilePaths,
          name: 'file',
          callBack: function(res2) {
            wx.hideLoading();
            var img = {};
            img.path = JSON.parse(res2).filePath;
            img.url = JSON.parse(res2).resourcesUrl + JSON.parse(res2).filePath;
            var photoFiles = ths.data.photoFiles;
            photoFiles.push(img);
            ths.setData({
              photoFiles: photoFiles
            })
          }
        };
        http.upload(params);
      }
    })
  },

  /**
   * 删除图片
   */
  removeImage: function(e) {
    var idx = e.currentTarget.dataset.idx;
    var photoFiles = this.data.photoFiles;
    photoFiles.splice(idx, 1)
    this.setData({
      photoFiles: photoFiles
    });
    console.log('删除图片')
  },


  /**
   * 申请退款
   */
  applyRefund: function () {
    var myreg = /^1(3|4|5|6|7|8|9)\d{9}$/;
    var pics = '';
    this.data.photoFiles.forEach(function (item) {
      pics += item.path + ',';
    });
    if (pics != '') {
      pics = pics.substring(0, pics.length - 1)
    }
    // 检查数据完整性
    if (this.data.buyerReason == 0) {
      wx.showToast({
        icon: 'none',
        title: '请选择退款原因',
      })
    } else if (this.data.actualTotal < 0){
      wx.showToast({
        icon: 'none',
        title: '请填写正确的退款金额',
      })
    } else if (this.data.buyerMobile.length !== 11 || !myreg.test(this.data.buyerMobile)) {
      // console.log(this.data.buyerMobile)
      wx.showToast({
        icon: 'none',
        title: '请填写正确的手机号码',
      })
    } else if (this.data.buyerDesc.length == 0) {
      wx.showToast({
        icon: 'none',
        title: '请填写退款说明',
      })
    }else{
      console.log('status：',this.data.refundItem.status)
      console.log('isLastProd：',this.data.isLastProd)
      var  refundReasonArray;
      var  refundReasonArray;
      if(this.data.isReceiver == 0) { // 未收货
        refundReasonArray = this.data.refundPriReasonArray
      }else if(this.data.isReceiver == 1) { // 已收货
        refundReasonArray = this.data.refundProdReasonArray
      }
      if(this.data.refundItem.status == 2 && this.data.isLastProd ) {  //待发货(包含运费)并且是最后一件
        console.log('待发货并且是最后一件')
        console.log(this.data.isLastProd)
        wx.showModal({
          title: '提示',
          content: '本次申请的退款商品是本单最后一件商品，退款金额中包含本单运费，一旦提交申请，本单所有商品的退款申请均不可撤销，是否确认提交',
          success: res => {
            if (res.confirm) {
              console.log('用户点击确定')
              wx.showLoading();
              var params = {
                url: "/p/orderRefund/apply",
                method: "POST",
                data: {
                  orderNumber: this.data.orderNumber, //订单编号
                  applyType: this.data.applyType, //退款方式(1:仅退款 2退款退货)
                  isReceiver: Number(this.data.isReceiver), //货物状态(1:已收到货 0:未收到货)
                  buyerReason: refundReasonArray[this.data.buyerReason], //退款原因
                  goodsNum: this.data.goodsNum, //退款数量（0或不传值则为全部数量）
                  refundAmount: this.data.refundAmount, //退款金额
                  buyerMobile: this.data.buyerMobile, //手机号码（默认当前订单手机号码）
                  buyerDesc: this.data.buyerDesc, //备注说明
                  photoFiles: pics, //凭证图片列表
                  refundType: this.data.refundType, //退款单类型（1:整单退款,2:单个物品退款）
                  orderItemId: this.data.refundItem.orderItemId
                },
                callBack: (res) => {
                  wx.hideLoading();
                  // 去到我的退款订单页面
                  wx.redirectTo({
                    url: '/pages/afterSales/afterSales',
                  })
                }
              };
              http.request(params);
            } else if (res.cancel) {
              console.log('用户点击取消')
            }
          }
        })
      } else {
        console.log('非待发货（包含运费）或者非是最后一件')
        console.log(this.data.isLastProd)
        wx.showLoading();
        var params = {
          url: "/p/orderRefund/apply",
          method: "POST",
          data: {
            orderNumber: this.data.orderNumber, //订单编号
            applyType: this.data.applyType, //退款方式(1:仅退款 2退款退货)
            isReceiver: Number(this.data.isReceiver), //货物状态(1:已收到货 0:未收到货)
            buyerReason: refundReasonArray[this.data.buyerReason], //退款原因
            goodsNum: this.data.goodsNum, //退款数量（0或不传值则为全部数量）
            refundAmount: this.data.refundAmount, //退款金额
            buyerMobile: this.data.buyerMobile, //手机号码（默认当前订单手机号码）
            buyerDesc: this.data.buyerDesc, //备注说明
            photoFiles: pics, //凭证图片列表
            refundType: this.data.refundType, //退款单类型（1:整单退款,2:单个物品退款）
            orderItemId: this.data.refundItem.orderItemId
          },
          callBack: (res) => {
            wx.hideLoading();
            // 去到我的退款订单页面
            wx.redirectTo({
              url: '/pages/afterSales/afterSales',
            })
          }
        };
        http.request(params);
      }
    }
  },

  /**
   * 修改退款申请
   */
  alterRefundApply: function(e) {

  },

  /**
   * 将获取到的input内容放进数据里
   */
  onDescInput: function(e) {
    this.setData({
      buyerDesc: e.detail.value
    });
  },
  onRefInput: function(e) {
    this.setData({
      refundAmount: e.detail.value
    })
  },
  onMobileInput: function(e) {
    this.setData({
      buyerMobile: e.detail.value
    })
  },

  /**
   * 退款图片预览
   */
  refundPicPreView(e) {
    var idx = e.currentTarget.dataset.idx
    var urls = []
    this.data.photoFiles.forEach(el => {
      urls.push(el.url)
    })
    wx.previewImage({
      current: urls[idx],
      urls: urls
    })
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady: function() {

  },

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

  },

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

  },

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

  },

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

  },

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

  },

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

  }
})
