/* eslint-disable no-console */
// 全局请求封装
import jstz from 'jstz'

const http = {
  request: (params) => {
    // 请求参数处理
    if (Object.prototype.toString.call(params.data) == '[object Array]') {
      params.data = JSON.stringify(params.data)
    } else if (Object.prototype.toString.call(params.data) == '[object Number]') {
      params.data = params.data + ''
    }
    // 发起请求
    return new Promise((resolve, reject) => {
      const timezone = jstz.determine()

      uni.request({
        dataType: 'json',
        responseType: params.responseType == undefined ? 'text' : params.responseType,
        header: {
          Authorization: uni.getStorageSync('bbcToken_us'),
          locale: uni.getStorageSync('bbcMsLang') || 'zh_CN',
          timeZone: timezone.name() || 'Asia/Shanghai'
        },
        url: (params.domain ? params.domain : import.meta.env.VITE_APP_BASE_API) + params.url,
        data: params.data,
        method: params.method == undefined ? 'POST' : params.method,
        success: (res) => {
          const responseData = res.data
          // 00000 请求成功
          if (responseData.code === '00000') {
            if (params.callBack) {
              params.callBack(responseData.data)
            }
            resolve(responseData)
          }
          // A00001 用于直接显示提示用户的错误，内容由输入内容决定
          // A00002 用于直接显示提示系统的成功,内容由输入决定
          if (responseData.code === 'A00001' || responseData.code === 'A00002') {
            if (!params.hasCatch) {
              uni.showToast({
                title: responseData.msg,
                icon: 'none',
                duration: 1500
              })
            }
          }
          // A00004 未授权
          if (responseData.code === 'A00004') {
            uni.hideLoading()
            uni.removeStorageSync('bbcToken_us')
            uni.removeStorageSync('bbcAuthorities')
            uni.redirectTo({
              url: '/pages/login/login'
            })
            return
          }

          // A00005 服务器出了点小差
          if (responseData.code === 'A00005') {
            http.onRequestFail(params, responseData)
            uni.showToast({
              title: '服务器出了点小差~',
              icon: 'none'
            })
          }
          // 其他异常码
          if (responseData.code !== '00000') {
            reject(responseData)
          }
        },
        fail: (err) => {
          uni.showToast({
            title: '请求失败',
            icon: 'none'
          })
          reject(err)
        }
      })
    })
  },

  /**
   * 处理请求失败
   * @param params
   * @param responseData
   */
  onRequestFail: (params, responseData) => {
    console.error('============== 请求异常 ==============')
    console.log('接口地址: ', params.url)
    console.log('异常信息: ', responseData)
    console.error('============== 请求异常 end ==========')
  },

  /**
   * 上传文件统一接口
   */
  upload: (params) => {
    console.log(params)
    uni.uploadFile({
      url: import.meta.env.VITE_APP_BASE_API + params.url,
      filePath: params.filePath,
      name: params.name,
      header: {
        Authorization: uni.getStorageSync('bbcToken_us')
      },
      dataType: 'json',
      responseType: params.responseType === undefined ? 'json' : params.responseType,
      success: (res) => {
        const responseData = JSON.parse(res.data)
        if (responseData.code === '00000') {
          if (params.callBack) {
            params.callBack(responseData.data)
          }
        } else {
          console.log('responseData', responseData.data)
          uni.showToast({
            title: '上传失败',
            icon: 'none'
          })
        }
      },
      fail: function () {
        uni.hideLoading()
      }
    })
  }
}

export default http
