/**
 * uni-app 网络请求封装
 * @author steelwei
 */
import { BASE_URL, CLIENT_ID, PLATFORM_CODE, TENANT_ID } from './config'
import { getToken, clearAuth } from './auth'

/**
 * 通用请求方法
 * @param {Object} options - 请求配置
 * @param {string} options.url - 请求路径（不含 BASE_URL）
 * @param {string} [options.method='GET'] - 请求方法
 * @param {Object} [options.data] - 请求数据
 * @param {Object} [options.header] - 额外请求头
 * @param {boolean} [options.needToken=true] - 是否需要携带 Token
 * @returns {Promise}
 */
export default function request(options = {}) {
  const {
    url,
    method = 'GET',
    data,
    header = {},
    needToken = true
  } = options

  // 构建请求头
  const headers = {
    'Content-Type': 'application/json;charset=utf-8',
    'clientid': CLIENT_ID,
    'X-Platform-Code': PLATFORM_CODE,
    ...header
  }

  // 携带 Token
  if (needToken) {
    const token = getToken()
    if (token) {
      headers['Authorization'] = 'Bearer ' + token
    }
  }

  return new Promise((resolve, reject) => {
    uni.request({
      url: BASE_URL + url,
      method: method.toUpperCase(),
      data,
      header: headers,
      timeout: 600000,
      success: (res) => {
        console.log(res)
        const statusCode = res.statusCode
        const code = res.data.code
        const msg = res.data.msg
        const result = res.data.data

        // HTTP 状态码错误
        // if (statusCode === 401) {
        //   // Token 过期或未登录
        //   clearAuth()
        //   uni.showToast({ title: '登录已过期，请重新登录', icon: 'none' })
        //   setTimeout(() => {
        //     uni.reLaunch({ url: '/pages/login/index' })
        //   }, 1500)
        //   return reject(new Error('未授权'))
        // }

        if (statusCode !== 200) {
          const errorMsg = msg || `请求失败(${statusCode})`
          uni.showToast({ title: errorMsg, icon: 'none' })
          return reject(new Error(errorMsg))
        }

        if (code === 401) {
          // Token 过期或未登录
          clearAuth()
          uni.showToast({ title: '登录已过期，请重新登录', icon: 'none' })
          setTimeout(() => {
            uni.reLaunch({ url: '/pages/login/index' })
          }, 1500)
          return reject(new Error('未授权'))
        }

        // 业务状态码
        if (code !== undefined && code !== 200) {
          const errorMsg = msg || '操作失败'
          uni.showToast({ title: errorMsg, icon: 'none' })
          return reject(new Error(errorMsg))
        }

        // 账号禁用判断：如果获取个人信息的接口返回禁用状态，强制退出
        if (url === '/fulfiller/fulfiller/my' && result) {
          if (result.status === 'disabled' || result.status === '1' || result.status === 1) {
            clearAuth()
            uni.showModal({
              title: '提示',
              content: '您的账号已被禁用',
              showCancel: false,
              success: () => {
                uni.reLaunch({ url: '/pages/login/index' })
              }
            })
            return reject(new Error('账号已被禁用'))
          }
        }

        resolve(res.data)
      },
      fail: (err) => {
        uni.showToast({ title: err.errMsg || '网络请求失败', icon: 'none' })
        reject(err)
      }
    })
  })
}
