import { ref } from 'vue'
import { sendSmsCode } from '@/api/common'
import { modalStore } from '@/store/modal'
import dayjs from 'dayjs';
import test from './test'

const modal = modalStore()
// 发送验证码
export const getSmsCode = (event, mobile) => {
  const lastSendTimer = modal.lastTimer[event];
  if (typeof lastSendTimer === 'undefined') {
    uni.showToast({
      icon: 'error',
      title: '短信发送事件错误'
    })
    return;
  }

  const duration = dayjs().unix() - lastSendTimer;
  const canSend = duration >= 60;
  if (!canSend) {
    uni.showToast({
      icon: 'none',
      title: '请稍后再试'
    })
    return;
  }
  // 只有 mobile 非空时才校验。因为部分场景（修改密码），不需要输入手机
  if (mobile && !test.mobile(mobile)) {
    uni.showToast({
      icon: 'none',
      title: '手机号码格式不正确'
    })
    return;
  }

  // 发送验证码 + 更新上次发送验证码时间
  let scene = -1;
  switch (event) {
    case 'resetPassword':
      scene = 4;
      break;
    case 'changePassword':
      scene = 3;
      break;
    case 'changeMobile':
      scene = 2;
      break;
    case 'smsLogin':
      scene = 30; // 对接门墩短信登录
    case 'smsRegister':
      scene = 30; // 对接门墩短信登录
      break;
  }
  sendSmsCode({ phone: mobile, scene }).then((res) => {
    if (res.code === 0) {
      uni.showToast({
        title: '发送成功，请注意查收',
        icon: 'none',
        duration: 2000
      })
      modal.$patch((state) => {
        state.lastTimer[event] = dayjs().unix();
      })
    }
  })
}

// 验证码倒计时
export const getSmsTimer = (event) => {
  const lastSendTimer = modal.lastTimer[event]

  if (typeof lastSendTimer === 'undefined') {
    uni.showToast({
      icon: 'none',
      title: '短信发送事件错误'
    })
    return
  }

  const duration = ref(dayjs().unix() - lastSendTimer - 60)
  const canSend = duration.value >= 0

  if (canSend) {
    return '获取验证码'
  }

  if (!canSend) {
    setTimeout(() => {
      duration.value++;
    }, 1000);
    return -duration.value.toString() + ' 秒'
  }
}