import type { InternalAxiosRequestConfig, AxiosRequestConfig, AxiosResponse, AxiosError } from 'axios'
import { message as Message, Modal } from 'ant-design-vue'

import useUserStore from '@/store/modules/user'

export function requestSuccessFunc(requestObj: InternalAxiosRequestConfig) {
  // 自定义请求拦截逻辑，可以处理权限，请求发送监控等
  // ...

  return requestObj
}

export function requestFailFunc(requestError: AxiosRequestConfig) {
  // 自定义发送请求失败逻辑，断网，请求发送监控等
  // ...

  return Promise.reject(requestError)
}

export function responseSuccessFunc(response: AxiosResponse) {
  // 自定义响应成功逻辑，全局拦截接口，根据不同业务做不同处理，响应成功监控等
  // ...
  const { status, data } = response
  const { code, message, success } = data
  if (success) {
    // console.log('success')
    return response
  } else {
    if (code === 500001) {
      // 特殊处理
      Modal.error({
        title: '提示',
        content: '您的账号已被冻结，暂时无法登录',
        centered: true,
        okText: '确定',
        onOk: () => {
          // window.location.reload()
          const userStore = useUserStore()
          userStore.feLogout()
        },
      })
    }
    Message.error(message)
    return Promise.reject(message)
  }
}

export function responseFailFunc(responseError: AxiosError) {
  // 响应失败，可根据 responseError.status 来做监控处理
  console.log(responseError)

  if (!responseError.response) {
    Message.error('系统错误')
    return
  }
  const { status, data } = responseError.response

  if (status === 401) {
    Message.error('登录失效, 请重新登录!')

    setTimeout(() => {
      const userStore = useUserStore()
      userStore.feLogout()
    }, 2000)
  } else {
    Message.error(status + ' 系统错误')
  }

  return Promise.reject(responseError)
}

