// HTTP请求封装
const BASE_URL = process.env.NODE_ENV === 'development' 
  ? 'http://localhost:12345/api' 
  : 'https://accounting.aqroid.cn/api'

// 获取token
function getToken() {
  return uni.getStorageSync('token') || ''
}

// 请求拦截器
function request(options) {
  return new Promise((resolve, reject) => {
    // 显示加载提示
    if (options.loading !== false) {
      uni.showLoading({
        title: '加载中...',
        mask: true
      })
    }
    
    uni.request({
      url: BASE_URL + options.url,
      method: options.method || 'GET',
      data: options.data || {},
      header: {
        'Content-Type': options.contentType || 'application/json',
        'Authorization': 'Bearer ' + getToken(),
        ...options.header
      },
      success: (res) => {
        uni.hideLoading()
        
        if (res.statusCode === 200) {
          if (res.data.code === 200 || res.data.code === undefined) {
            resolve(res.data)
          } else {
            // 业务错误
            if (res.data.code === 401) {
              // token过期，跳转到登录页
              uni.removeStorageSync('token')
              uni.removeStorageSync('userInfo')
              uni.reLaunch({
                url: '/pages/login/login'
              })
            }
            uni.showToast({
              title: res.data.message || '请求失败',
              icon: 'none'
            })
            reject(res.data)
          }
        } else if (res.statusCode === 401) {
          // 未授权，跳转到登录页
          uni.removeStorageSync('token')
          uni.removeStorageSync('userInfo')
          uni.reLaunch({
            url: '/pages/login/login'
          })
          reject(res)
        } else {
          uni.showToast({
            title: '请求失败',
            icon: 'none'
          })
          reject(res)
        }
      },
      fail: (err) => {
        uni.hideLoading()
        uni.showToast({
          title: '网络错误',
          icon: 'none'
        })
        reject(err)
      }
    })
  })
}

// GET请求
export function get(url, data, options = {}) {
  return request({
    url,
    method: 'GET',
    data,
    ...options
  })
}

// POST请求
export function post(url, data, options = {}) {
  return request({
    url,
    method: 'POST',
    data,
    ...options
  })
}

// PUT请求
export function put(url, data, options = {}) {
  return request({
    url,
    method: 'PUT',
    data,
    ...options
  })
}

// DELETE请求
export function del(url, data, options = {}) {
  return request({
    url,
    method: 'DELETE',
    data,
    ...options
  })
}

// 文件上传
export function upload(url, filePath, options = {}) {
  return new Promise((resolve, reject) => {
    uni.showLoading({
      title: '上传中...',
      mask: true
    })
    
    uni.uploadFile({
      url: BASE_URL + url,
      filePath: filePath,
      name: 'file',
      header: {
        'Authorization': 'Bearer ' + getToken()
      },
      formData: options.formData || {},
      success: (res) => {
        uni.hideLoading()
        try {
          const data = JSON.parse(res.data)
          if (res.statusCode === 200) {
            resolve(data)
          } else {
            uni.showToast({
              title: data.message || '上传失败',
              icon: 'none'
            })
            reject(data)
          }
        } catch (e) {
          uni.showToast({
            title: '上传失败',
            icon: 'none'
          })
          reject(e)
        }
      },
      fail: (err) => {
        uni.hideLoading()
        uni.showToast({
          title: '上传失败',
          icon: 'none'
        })
        reject(err)
      }
    })
  })
}

export default {
  get,
  post,
  put,
  delete: del,
  upload
}









