// request.ts
import axios, { AxiosRequestConfig, AxiosError, AxiosResponse } from 'axios';

const baseUrl = import.meta.env.VITE_APP_API;


// 添加一个新的类型,用于包装 AxiosRequestConfig
interface InternalAxiosRequestConfig<T = any> extends AxiosRequestConfig {
  headers?: Record<string, any> | undefined;
  // 可以在这里添加额外的属性
  // 比如 token?: string;
}
const token = sessionStorage.getItem('u_token');
const defaultHeaders: Record<string, any> = {
  Accept: 'application/json',
  ...(token && { Token: token }),
  // 其他默认头部...
};

// 创建一个 axios 实例
const instance = axios.create({
  baseURL: baseUrl,
  timeout: 10000,
});

// 请求拦截器
const requestConfig: InternalAxiosRequestConfig = {
  // 其他配置...
  headers: { ...defaultHeaders },
};

// 响应拦截器
instance.interceptors.response.use(
  (response: AxiosResponse) => {
    if (response.status === 200) {
      return response.data;
    } else {
      // 处理非 200 状态码
      return Promise.reject(new Error(`HTTP error: ${response.status}`));
    }
  },
  (error: AxiosError) => {
     // 对响应错误做处理
     if (error.response) {
      // 请求已经发出,但服务器响应的状态码不在 2xx 范围内
      console.error(`HTTP error: ${error.response.status}`);
      // 这里你可以根据状态码执行一些特定的逻辑
      if (error.response.status === 401) {
        console.error("Unauthorized. Redirecting to login...");
        // 例如,重定向到登录页面
        // window.location.href = "/login";
      }
    } else {
      // 请求没有发出,可能是网络问题或者其他原因
      console.error("Network error:", error.message);
    }
    return Promise.reject(error);
  }
);

// 封装请求函数
const request = async <T>(config: InternalAxiosRequestConfig): Promise<InternalAxiosRequestConfig> => {
  try {
    const response = await instance.request(config);
    return response;
  } catch (error) {
    // 在这里处理错误
    console.error('Request error:', error);
    return Promise.reject(error);
  }
};



export default request;