import axios from 'axios';

// 获取API基础URL；开发环境可在 .env.development 留空，配合 Vite 代理访问 /platform
const apiBaseURL = import.meta.env.VITE_API_BASE_URL ?? "";

// 创建axios实例（普通接口 5min；大文件上传在 api/file.js 单独更长 timeout）
const service = axios.create({
  baseURL: apiBaseURL,
  timeout: 300000,
  withCredentials: false // JWT 不需要 Cookie
});
 
// 请求拦截器
service.interceptors.request.use(
  config => {
    const token = localStorage.getItem('token');
    if (token) {
      config.headers['Authorization'] = `Bearer ${token}`;
    }

    // 对于有 body 的请求（POST、PUT、PATCH），默认 JSON；FormData 由浏览器带 multipart boundary，不可手写 Content-Type
    if (config.data && ['post', 'put', 'patch'].includes(config.method?.toLowerCase())) {
      if (config.data instanceof FormData) {
        delete config.headers['Content-Type'];
        delete config.headers['content-type'];
      } else if (!config.headers['Content-Type'] && !config.headers['content-type']) {
        config.headers['Content-Type'] = 'application/json';
      }
    }
    return config;
  },
  error => {
    return Promise.reject(error);
  }
);
 
// 响应拦截器
service.interceptors.response.use(
  response => {
    return response.data;
  },
  error => {
    if (error.response) {
      switch (error.response.status) {
        case 401:
          console.error('未授权，请重新登录');
          localStorage.removeItem('token');
          localStorage.removeItem('userInfo');
          if (window.location.hash !== '#/login') {
            window.location.href = '#/login';
          }
          return Promise.reject(new Error('token无效'));
        case 404:
          console.error('请求的资源不存在');
          break;
        default:
          console.error('请求失败，请稍后再试');
      }
    } else if (error.request) {
      console.error('请求失败，请检查网络连接');
    } else {
      console.error('请求配置错误');
    }
    return Promise.reject(error);
  }
);
 
export default service;