import axios from 'axios';
import { message } from 'antd';
import { API_CONFIG } from './config';

// 创建 axios 实例
const request = axios.create({
  baseURL: `${API_CONFIG.baseURL}${API_CONFIG.apiPrefix}`,
  timeout: API_CONFIG.timeout,
  headers: {
    'Content-Type': 'application/json'
  }
});

// 请求拦截器 - 添加 Token
request.interceptors.request.use(
  config => {
    const token = localStorage.getItem('access_token');
    if (token) {
      config.headers.Authorization = `Bearer ${token}`;
    }
    return config;
  },
  error => {
    return Promise.reject(error);
  }
);

// 响应拦截器 - 统一错误处理
request.interceptors.response.use(
  response => {
    return response.data;
  },
  error => {
    if (error.response) {
      const { status, data } = error.response;
      
      // Token 过期或无效
      if (status === 401) {
        localStorage.removeItem('access_token');
        localStorage.removeItem('user_info');
        message.error('登录已过期，请重新登录');
        window.location.href = '/';
        return Promise.reject(new Error('登录已过期，请重新登录'));
      }
      
      // 权限不足
      if (status === 403) {
        const errorMessage = data.detail || '没有权限访问';
        message.error(errorMessage);
        return Promise.reject(new Error(errorMessage));
      }
      
      // 其他错误
      const errorMessage = data.detail || '请求失败';
      message.error(errorMessage);
      return Promise.reject(new Error(errorMessage));
    }
    
    // 网络错误
    if (error.request) {
      message.error('网络连接失败，请检查网络');
      return Promise.reject(new Error('网络连接失败'));
    }
    
    return Promise.reject(error);
  }
);

export default request;
