// 检验手机号格式
const checkPhone = (phone) => {
  if (!phone || !/^1[3-9]\d{9}$/.test(phone)) {
    return false
  }
  return true;
}

// 转换时间戳为yyyy-mm-dd
// params： 时间戳
// return yyyy-mmm-dd
const formatTime = (time) => {
  if (!time) {
    return '时间格式错误，需要传入时间戳'
  }
  const date = new Date(time)
  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与当前时间的差值
// params： yyyy-mm-dd格式的字符串
// return： 差值（天）
const calculateDateDifference = (dateString) => {
  if (!dateString) {
    return '时间格式错误，需要传入yyyy-mm-dd格式的字符串'
  }
  // 传入值为yyyy-mm-dd格式的字符串
  const inputDate = new Date(dateString)
  // 化为时间戳
  // const inputTime = inputDate.getTime()
  const currentDate = new Date()
  const timeDifference = inputDate - currentDate

  if (!(currentDate.setHours(0, 0, 0, 0) - inputDate.setHours(0, 0, 0, 0))) {
    return 0
  }
  // 如果为负 返回-1
  if (timeDifference < 0) {
    return -1
  }
  // 计算天数
  const dayDifference = Math.ceil(timeDifference / (1000 * 60 * 60 * 24))

  return dayDifference
}

// #ifdef H5
import jWeixin from './lib/jweixin-module.js'
// #endif

/**
 * 微信支付方法 - 支持小程序和公众号多环境
 * @param {Object} paymentData - 支付数据对象
 * @param {Function} successCallback - 成功回调函数
 * @param {Function} failCallback - 失败回调函数
 * @returns {Promise} - H5环境返回Promise，小程序环境直接执行回调
 */
const wxPay = (paymentData, successCallback, failCallback) => {
  // #ifdef MP-WEIXIN
  // 小程序环境使用uni.requestPayment
  uni.requestPayment({
    provider: 'wxpay',
    timeStamp: paymentData.timeStamp,
    nonceStr: paymentData.nonceStr,
    package: paymentData.packageValue,
    signType: paymentData.signType,
    paySign: paymentData.paySign,
    success: (res) => {
      console.log('小程序支付成功:', res)
      uni.showToast({
        title: '支付成功',
        icon: 'success'
      })
      if (successCallback) {
        successCallback(res)
      }
    },
    fail: (err) => {
      console.log('小程序支付失败:', err)
      if (err.errMsg === 'requestPayment:fail cancel') {
        uni.showToast({
          title: '支付已取消',
          icon: 'none'
        })
      } else {
        uni.showToast({
          title: '支付失败',
          icon: 'none'
        })
      }
      if (failCallback) {
        failCallback(err)
      }
    }
  })
  // #endif

  // #ifdef H5
  // H5环境使用微信JSSDK
  return new Promise((resolve, reject) => {
    // JSSDK配置成功后的回调
    jWeixin.ready(function() {
      // 调用微信支付接口
      jWeixin.chooseWXPay({
        appId: paymentData.appId,
        timestamp: paymentData.timeStamp, // 支付签名时间戳
        nonceStr: paymentData.nonceStr, // 支付签名随机串
        package: paymentData.packageValue, // 统一支付接口返回的prepay_id参数值
        signType: paymentData.signType, // 签名类型，默认为MD5
        paySign: paymentData.paySign, // 支付签名
        success: function(result) {
          console.log('H5支付成功:', result)
          uni.showToast({
            title: '支付成功',
            icon: 'success'
          })
          if (successCallback) {
            successCallback(result)
          }
          resolve(result)
        },
        fail: function(error) {
          console.log('H5支付失败:', error)
          uni.showToast({
            title: '支付失败',
            icon: 'none'
          })
          if (failCallback) {
            failCallback(error)
          }
          reject(error)
        },
        cancel: function(error) {
          console.log('H5支付取消:', error)
          uni.showToast({
            title: '支付已取消',
            icon: 'none'
          })
          const cancelError = { type: 'cancel', ...error }
          if (failCallback) {
            failCallback(cancelError)
          }
          reject(cancelError)
        }
      })
    })

    // JSSDK配置失败处理
    jWeixin.error(function(error) {
      console.log('JSSDK配置失败:', error)
      uni.showToast({
        title: 'JSSDK配置失败',
        icon: 'none'
      })
      const configError = { type: 'config_error', ...error }
      if (failCallback) {
        failCallback(configError)
      }
      reject(configError)
    })
  })
  // #endif
}



export {
  checkPhone,
  formatTime,
  calculateDateDifference,
  wxPay
}