// src/utils/request.ts
import axios from 'axios'
import { ElMessage } from 'element-plus'
import type { AxiosInstance, AxiosResponse } from 'axios'

// 创建 axios 实例
const service: AxiosInstance = axios.create({
  baseURL: import.meta.env.VITE_API_BASE_URL || '', // 从环境变量中读取
  timeout: 100000000, // 超时时间
  withCredentials: true // 是否允许携带 cookie
})

// 请求拦截器
service.interceptors.request.use(
  (config) => {
    // 可在此添加 token 到 headers 中
    const token = localStorage.getItem('token')
    if (token) {
      config.headers!['Authorization'] = `${token}`
    }
    return config
  },
  (error) => { 
    // 请求错误处理
    console.error('请求错误:', error)
    return Promise.reject(error)
  }
)

// 响应拦截器
service.interceptors.response.use(
  (response: AxiosResponse) => {
    const res = response.data

    if (res.code !== 200) {
      ElMessage({
        message: res.msg || '请求失败',
        type: 'error',
        duration: 5 * 1000,
      })
      // 特殊状态码处理，如 token 失效等
      if (res.code === 401) {
        // 跳转登录页
        window.location.href = '/'
      }

      return Promise.reject(res.msg || '请求失败')
    }

    return res
  },
  (error) => {
    // 网络错误、超时等处理
    let  message = ''
    if (axios.isCancel(error)) {
      console.log(axios.isCancel(error))
      message = ''
    }else{
      message = error.message.includes('timeout') ? '请求超时' : '网络异常'
    }
    if(message){
        ElMessage({
          message,
          type: 'error',
        })
    }
    return Promise.reject(error)
  }
)

export default service
