import axios from 'axios'

// 创建 axios 实例
const service = axios.create({
  baseURL: "http://127.0.0.1:8090/api",
  timeout: 10000
})

// 存储请求的防抖定时器（key: 请求标识, value: 定时器ID）
const debounceTimers = new Map();
// 防抖时间（毫秒，可根据需求调整）
const DEBOUNCE_DELAY = 500;

// 生成请求唯一标识（URL + 参数 + 方法）
const getRequestKey = (config) => {
  const { url, method, params, data } = config;
  // 序列化参数，确保相同参数生成相同key
  const paramsStr = params ? JSON.stringify(params) : '';
  const dataStr = data ? JSON.stringify(data) : '';
  return `${method}:${url}:${paramsStr}:${dataStr}`;
};
// 请求拦截器：添加防抖逻辑
service.interceptors.request.use(
  config => {
    // 1. 检查POST请求体和参数是否都为空
    if (config.method === 'post') {
      // 检查请求体是否为空
      const bodyEmpty = 
        config.data === undefined || 
        config.data === null || 
        (typeof config.data === 'object' && Object.keys(config.data).length === 0) ||
        (typeof config.data === 'string' && config.data.trim().length === 0);
      
      // 检查URL参数是否为空
      const paramsEmpty = 
        config.params === undefined || 
        config.params === null || 
        (typeof config.params === 'object' && Object.keys(config.params).length === 0);
      
      // 如果请求体和参数都为空，则打印提示
      if (bodyEmpty && paramsEmpty) {
        console.log('提示：POST请求的请求体和参数均为空');
      }
    }

    // 2. 防抖逻辑
    return new Promise((resolve) => {
      const requestKey = getRequestKey(config);
      // 清除之前的定时器
      if (debounceTimers.has(requestKey)) {
        clearTimeout(debounceTimers.get(requestKey));
      }
      // 设置新定时器
      const timer = setTimeout(() => {
        debounceTimers.delete(requestKey);
        resolve(config); // 延迟后执行请求
      }, DEBOUNCE_DELAY);
      debounceTimers.set(requestKey, timer);
    });
  },
  error => {
    console.error('请求拦截器错误：', error);
    return Promise.reject(error);
  }
);
export default service;