import axios from 'axios'
import type { AxiosRequestConfig, AxiosResponse } from 'axios'

const instance = axios.create({
    baseURL: process.env.API_BASE_URL,
    timeout: 10000,
    headers: {
      'Content-Type': 'application/json'
    }
  })
  
  // 请求拦截器
  instance.interceptors.request.use(
    (config) => {
      console.log('Request Config:', config)
      // 添加认证 token
      const token = localStorage.getItem('token')
      if (token) {
        config.headers.Authorization = `Bearer ${token}`
      }
      return config
    },
    (error) => {
      return Promise.reject(error)
    }
  )
  
  // 响应拦截器
  instance.interceptors.response.use(
    (response) => {
      // 统一处理响应数据格式
      if (response.status === 200) {
        return response.data
      }
      return Promise.reject(response.data)
    },
    (error) => {
      if(error.status===401){
       // window.location.href = '/login';
      }
      // 统一错误处理
      console.error('API Error:', error.response?.status, error.message)
      return Promise.reject(error)
    }
  )

export default instance