import axios from 'axios';
import { getConfig, getSettings } from './configService';

// 创建 axios 实例
const api = axios.create({
  timeout: 10000, // 请求超时时间
});

// 请求拦截器
api.interceptors.request.use(
  async config => {
    const appConfig = await getConfig();
    const settings = await getSettings();
    const serverUrl = settings.serverUrl || appConfig?.serverUrl;

    if (!serverUrl) {
      const error = new Error('服务器地址未配置');
      console.error(error.message);
      return Promise.reject(error);
    }

    config.baseURL = serverUrl.replace(/\/$/, '');
    // 设置通用请求头
    config.headers = {
      'Content-Type': 'application/json',
      ...appConfig?.headers,
      ...config.headers,
    } as any;

    console.log(
      `[Request] ${config.method?.toUpperCase()} ${config.baseURL}${
        config.url
      }`,
      { params: config.params, data: config.data },
    );
    return config;
  },
  error => {
    console.error('[Request Error]', error);
    return Promise.reject(error);
  },
);

// 响应拦截器
api.interceptors.response.use(
  response => {
    // 打印响应数据用于调试
    console.log(
      `[Response] ${response.config.method?.toUpperCase()} ${
        response.config.url
      }`,
      response.data,
    );

    // 统一处理API响应
    if (response.data && response.data.code && response.data.code !== 200) {
      throw new Error(`API 错误: ${response.data.message}`);
    }

    // 处理不同的响应数据格式
    if (response.data) {
      // 格式1: { success: true, result: { records: [...] } } - 新的任务管理API格式
      if (response.data.success && response.data.result) {
        if (
          response.data.result.records &&
          Array.isArray(response.data.result.records)
        ) {
          return response.data.result.records;
        }
        return response.data.result;
      }

      // 格式2: { data: { list: [...] } } - 原有格式
      if (typeof response.data.data !== 'undefined') {
        if (Array.isArray(response.data.data.list)) {
          return response.data.data.list;
        }
        return response.data.data;
      }

      // 格式3: 直接返回整个响应数据
      return response.data;
    }

    return response.data;
  },
  error => {
    if (error.response) {
      // 请求已发出，但服务器响应的状态码不在 2xx 范围
      console.error(
        `[Response Error] Status: ${error.response.status}`,
        error.response.data,
      );
      const httpError = new Error(
        `HTTP ${error.response.status}: ${
          error.response.statusText || 'Unknown Error'
        }`,
      );
      return Promise.reject(httpError);
    } else if (error.request) {
      // 请求已发出，但没有收到响应
      console.error('[Network Error]', error.request);
      return Promise.reject(new Error('网络错误，请检查您的连接'));
    } else {
      // 在设置请求时触发了一个错误
      console.error('[Request Setup Error]', error.message);
      return Promise.reject(error);
    }
  },
);

export default api;
