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) => {
      // 添加认证 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) => {
      console.log('Response:', response)
      // 统一处理响应数据格式
      if (response.status === 200) {
        return response.data
      }
      return Promise.reject(response.data)
    },
    (error) => {
      // 统一错误处理
      console.error('API Error:', error.response?.status, error.message)
      return Promise.reject(error)
    }
  )

export default instance