/**
 * 错误提示管理器
 * 用于控制错误提示的频率，避免短时间内重复显示相同类型的错误
 */
class ErrorNotificationManager {
  constructor() {
    // 记录最近显示的错误信息
    this.recentErrors = new Map();
    // 默认节流时间 (30秒)
    this.throttleTime = 3000;
    // 错误类型映射
    this.errorTypes = {
      'Network Error': 'network',
    'timeout': 'timeout',
    'Request failed with status code': 'statusCode',
    // 添加网络状态类型
    'networkReconnected': 'networkStatus',
    'NetworkError': 'network'
    };
  }

  /**
   * 获取错误类型
   * @param {String} message 错误信息
   * @returns {String} 错误类型
   */
  getErrorType(message) {
    for (const [key, type] of Object.entries(this.errorTypes)) {
      if (message.includes(key)) {
        return type;
      }
    }
    return 'unknown';
  }

  /**
   * 检查是否可以显示错误
   * @param {String} message 错误信息
   * @returns {Boolean} 是否可以显示
   */
  canShowError(message) {
    const errorType = this.getErrorType(message);
    const now = Date.now();
    
    // 检查同类型的错误是否最近已经显示过
    if (this.recentErrors.has(errorType)) {
      const lastTime = this.recentErrors.get(errorType);
      if (now - lastTime < this.throttleTime) {
        console.log(`[错误提示] 已抑制重复错误: ${errorType}`);
        return false;
      }
    }
    
    // 更新最后显示时间
    this.recentErrors.set(errorType, now);
    return true;
  }

  /**
   * 清理过期的错误记录
   */
  cleanup() {
    const now = Date.now();
    this.recentErrors.forEach((time, type) => {
      if (now - time > this.throttleTime) {
        this.recentErrors.delete(type);
      }
    });
  }
}

// 创建单例实例
const errorNotificationManager = new ErrorNotificationManager();
export default errorNotificationManager;