import axios, { AxiosRequestConfig, AxiosResponse } from 'axios';

// AI接口专用的简化axios实例
const { VITE_AI_API_URL } = import.meta.env;

// AI API基地址
export const AI_API_BASE_URL = VITE_AI_API_URL || '/ai';

// 扩展配置类型
interface AIAxiosRequestConfig extends AxiosRequestConfig {
  showErrorMessage?: boolean;
}

// 创建AI专用的axios实例
const aiAxiosInstance = axios.create({
  timeout: 60000, // AI接口可能需要更长的处理时间
  baseURL: AI_API_BASE_URL,
  withCredentials: false, // AI接口通常不需要cookie
  validateStatus: (status) => status >= 200 && status < 300,
  headers: {
    'Content-Type': 'multipart/form-data' // AI接口主要使用文件上传
  }
});

// 请求拦截器 - 简化版本
aiAxiosInstance.interceptors.request.use(
  (config) => {
    // 如果数据是FormData，让浏览器自动设置Content-Type
    if (config.data instanceof FormData) {
      delete config.headers['Content-Type'];
    }

    config.headers['Authorization'] = 'Bearer sk-08224b82-4850-4095-a734-edbab0478fa9';
    return config;
  },
  (error) => {
    return Promise.reject(error);
  }
);

// 响应拦截器 - 简化版本
aiAxiosInstance.interceptors.response.use(
  (response: AxiosResponse) => {
    if (response.data.results) {
      response.data = response.data.results;
    }

    return response;
  },
  (error) => {
    // 简化的错误处理
    console.error('AI API Error:', error);
    return Promise.reject(error);
  }
);

// 请求函数
async function aiRequest<T = any>(config: AIAxiosRequestConfig): Promise<T> {
  const response = await aiAxiosInstance.request<T>(config);
  return response.data;
}

// AI API 方法集合
export const aiApi = {
  // GET请求
  get<T>(url: string, config?: AIAxiosRequestConfig) {
    return aiRequest<T>({ ...config, method: 'GET', url });
  },

  // POST请求
  post<T>(url: string, data?: any, config?: AIAxiosRequestConfig) {
    return aiRequest<T>({
      ...config,
      method: 'POST',
      url,
      data,
      headers: {
        ...config?.headers,
        'Content-Type': 'application/json'
      }
    });
  },

  // 文件上传专用方法
  upload<T>(url: string, formData: FormData, config?: AIAxiosRequestConfig) {
    return aiRequest<T>({
      ...config,
      method: 'POST',
      url,
      data: formData,
      headers: {
        ...config?.headers,
        'Content-Type': 'multipart/form-data'
      }
    });
  },

  // PUT请求
  put<T>(url: string, data?: any, config?: AIAxiosRequestConfig) {
    return aiRequest<T>({ ...config, method: 'PUT', url, data });
  },

  // DELETE请求
  delete<T>(url: string, config?: AIAxiosRequestConfig) {
    return aiRequest<T>({ ...config, method: 'DELETE', url });
  }
};

export default aiApi;
