import axios, { AxiosResponse, AxiosError, InternalAxiosRequestConfig } from 'axios';

// 创建axios实例
export const api = axios.create({
  // baseURL: 'http://localhost:7529/api', // 本地开发时后端API基础URL
  baseURL: '/api', // 使用相对路径，依赖Next.js代理或部署时反向代理
  withCredentials: true, // 允许携带Cookie以支持Session认证
  timeout: 10000, // 请求超时时间
  headers: {
    'Content-Type': 'application/json'
  }
});

// 请求拦截器
api.interceptors.request.use(
  (config: InternalAxiosRequestConfig): InternalAxiosRequestConfig | Promise<InternalAxiosRequestConfig> => {
    // 可以在这里添加通用请求前的处理逻辑
    // 例如: 添加认证token (如果使用Token认证)
    // if (typeof window !== 'undefined') { // 确保在浏览器环境中
    //   const token = localStorage.getItem('auth_token');
    //   if (token) {
    //     config.headers = config.headers || {};
    //     config.headers.Authorization = `Bearer ${token}`;
    //   }
    // }
    return config;
  },
  (error: any) => {
    return Promise.reject(error);
  }
);

// 响应拦截器
api.interceptors.response.use(
  (response: AxiosResponse): AxiosResponse | Promise<AxiosResponse> => {
    // 可以在这里统一处理接口成功响应
    // 例如：检查后端自定义的成功码
    // if (response.data && response.data.code !== 0) {
    //   return Promise.reject(new Error(response.data.message || 'Error'));
    // }
    return response;
  },
  (error: AxiosError) => {
    // 可以在这里统一处理接口错误响应
    if (error.response) {
      // 服务器返回错误状态码
      console.error('API Error Response:', error.response.data);
      if (error.response.status === 401) {
        // 未授权，可以进行跳转到登录页等操作
        console.error('用户未登录或会话已过期');
        // **重要**: 在这里不能直接导航，应该在调用处或Context中处理
        // 通常会触发登出逻辑或设置一个状态，让UI跳转
      }
    } else if (error.request) {
      // 请求已发送但未收到响应
      console.error('网络请求失败，请检查网络连接:', error.request);
    } else {
      // 请求配置出错
      console.error('请求配置错误:', error.message);
    }
    // 抛出包含更多信息的错误，便于上层处理
    return Promise.reject(error.response?.data || error.message || 'An unknown error occurred');
  }
); 