// API模块主入口
import request from './request.js'
import * as services from './services.js'

// 导出所有服务
export * from './services.js'

// 导出请求实例
export { request }

// 默认导出
export default {
  // 请求实例
  request,
  
  // 所有服务
  ...services,
  
  // 工具函数
  utils: services.apiUtils,
  
  // 初始化配置
  init(config = {}) {
    // 可以在这里进行一些初始化配置
    console.log('API模块初始化完成', config)
  },
  
  // 设置认证token
  setAuthToken(token) {
    uni.setStorageSync('token', token)
  },
  
  // 获取认证token
  getAuthToken() {
    return uni.getStorageSync('token')
  },
  
  // 清除认证信息
  clearAuth() {
    uni.removeStorageSync('token')
    uni.removeStorageSync('refreshToken')
  },
  
  // 检查是否已登录
  isLoggedIn() {
    return !!this.getAuthToken()
  },
  
  // 统一错误处理
  handleError(error, defaultMessage = '操作失败') {
    const errorMessage = error.message || defaultMessage
    const errorCode = error.code || 'UNKNOWN_ERROR'
    
    // 可以根据错误码进行不同的处理
    switch (errorCode) {
      case 'UNAUTHORIZED':
        this.clearAuth()
        uni.navigateTo({ url: '/pages/auth/login' })
        break
      case 'NETWORK_ERROR':
        uni.showToast({ title: '网络连接失败', icon: 'none' })
        break
      default:
        uni.showToast({ title: errorMessage, icon: 'none' })
    }
    
    return { error: true, code: errorCode, message: errorMessage }
  },
  
  // 请求包装器，自动处理错误
  async withErrorHandling(promise, successMessage = '操作成功') {
    try {
      const result = await promise
      if (successMessage) {
        uni.showToast({ title: successMessage, icon: 'success' })
      }
      return { success: true, data: result }
    } catch (error) {
      return this.handleError(error)
    }
  }
}

// 自动初始化
const api = {
  request,
  ...services
}

// 全局错误处理
const originalRequest = uni.request
uni.request = function(config) {
  return originalRequest.call(this, config).catch(error => {
    console.error('请求失败:', error)
    throw error
  })
}

export default api