/* eslint-disable no-console */
// 全局请求封装
const http = {
  request: function (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) => {
      uni.request({
        dataType: 'json',
        responseType: params.responseType === undefined ? 'text' : params.responseType,
        header: {
          Authorization: uni.getStorageSync('cloudStationToken'),
          locale: uni.getStorageSync('b2cLang') || 'zh_CN'
        },
        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) => {
          if (res.statusCode === 404) {
            uni.showToast({
              title: '无法找到请求地址',
              icon: 'none'
            })
            return
          }
          if (res.statusCode !== 200) {
            uni.showToast({
              title: '服务器出了点小差~',
              icon: 'none'
            })
            return
          }
          const responseData = res.data
          // 仅返回结果
          if (!responseData.success && !responseData.code && !responseData.data) {
            if (params.callBack) {
              resolve(responseData)
            }
            return
          }
          if (responseData.code === 'A00001') {
            if (!params.hasCatch) {
              uni.showToast({
                title: responseData.msg || responseData.data || 'Error',
                icon: 'none'
              })
            }
          }
          // 00000 请求成功
          // A00002 用于直接显示提示系统的成功,内容由输入决定
          if (responseData.code === '00000' || responseData.code === 'A00002') {
            resolve(responseData)
          }
          // A00004 未授权
          if (responseData.code === 'A00004') {
            uni.removeStorageSync('cloudStationLoginResult')
            uni.removeStorageSync('cloudStationToken')
            uni.hideLoading()
            if (!params.dontTrunLogin) {
              if (uni.getStorageSync('cloudHadLogin')) {
                uni.showModal({
                  title: '提示',
                  content: '登录已过期，请重新登陆！',
                  success: res => {
                    if (res.confirm) {
                      // 跳转登录页面
                      uni.redirectTo({
                        url: '/pages/account-login/account-login'
                      })
                    } else {
                      uni.navigateTo({
                        url: '/pages/index/index'
                      })
                    }
                  }
                })
              } else {
                // 跳转登录页面
                uni.navigateTo({
                  url: '/pages/account-login/account-login'
                })
              }
            }
          }

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

  onRequestFail: (params, responseData) => {
    console.error('============== 请求异常 ==============')
    console.log('接口地址: ', params.url)
    console.log('异常信息: ', responseData)
    console.error('============== 请求异常 end ==========')
  },
  /**
   * 上传文件统一接口
   */
  upload: (params) => {
    uni.uploadFile({
      url: import.meta.env.VITE_APP_BASE_API + params.url,
      filePath: params.filePath,
      name: params.name,
      header: {
        Authorization: params.login ? undefined : uni.getStorageSync('cloudStationToken')
      },
      dataType: 'json',
      responseType: params.responseType === undefined ? 'json' : params.responseType,
      success: (res) => {
        const responseData = JSON.parse(res.data)
        console.log(responseData, 'responseData')
        if (responseData.code === '00000') {
          if (params.callBack) {
            params.callBack(responseData.data)
          }
        } else {
          uni.showToast({
            title: '服务器出了点小差~',
            icon: 'none'
          })
        }
      },
      fail: function () {
        uni.hideLoading()
      }
    })
  }
}
export default http
