// utils/request.js - 统一请求封装，兼容Vue.js和小程序的请求封装
import { useUserStore } from '@/store/user'

// 动态获取保险端后端地址
const BASE_URL = process.env.NODE_ENV === 'development' 
  ? 'http://localhost:3000/api'  // 本地开发环境，对应 c:\nxxmdata\insurance_backend
  : 'https://your-insurance-backend.com/api'  // 生产环境

// 统一请求封装，支持Vue.js和小程序
export function request(options) {
  return new Promise((resolve, reject) => {
    const userStore = useUserStore()
    const token = userStore.token || uni.getStorageSync('token')
    
    // 统一请求配置
    const requestConfig = {
      url: BASE_URL + options.url,
      method: options.method || 'GET',
      data: options.data || {},
      header: {
        'Content-Type': 'application/json',
        'Authorization': token ? `Bearer ${token}` : '',
        // 根据记忆添加缓存控制头，避免304问题
        'Cache-Control': 'no-cache',
        'Pragma': 'no-cache',
        ...options.header
      },
      timeout: 10000,
      success: (res) => {
        console.log('API请求成功:', options.url, res)
        
        // 统一响应处理（兼容现有保险端格式）
        if (res.statusCode === 200) {
          if (res.data.status === 'success') {
            resolve(res.data)
          } else {
            uni.showToast({
              title: res.data.message || '请求失败',
              icon: 'none'
            })
            reject(res.data)
          }
        } else if (res.statusCode === 401) {
          // token 过期，清理登录状态
          console.warn('Token过期，清理登录状态')
          userStore.logout()
          uni.removeStorageSync('token')
          uni.redirectTo({ url: '/pages/login/login' })
          reject(res.data)
        } else {
          uni.showToast({
            title: '网络请求失败',
            icon: 'none'
          })
          reject(res.data)
        }
      },
      fail: (error) => {
        console.error('API请求失败:', options.url, error)
        uni.showToast({
          title: '网络连接失败',
          icon: 'none'
        })
        reject(error)
      }
    }
    
    // 发起请求（兼容小程序和H5）
    uni.request(requestConfig)
  })
}

export default request