/**
 * 事件发射器基类
 * 提供事件订阅和发布机制
 */

class EventEmitter {
  constructor() {
    this.events = {};
  }

  /**
   * 注册事件监听器
   * @param {string} event - 事件名称
   * @param {Function} listener - 监听器函数
   */
  on(event, listener) {
    if (!this.events[event]) {
      this.events[event] = [];
    }
    this.events[event].push(listener);
  }

  /**
   * 移除事件监听器
   * @param {string} event - 事件名称
   * @param {Function} listener - 监听器函数（可选）
   */
  off(event, listener) {
    if (!this.events[event]) return;

    if (listener) {
      this.events[event] = this.events[event].filter(l => l !== listener);
    } else {
      delete this.events[event];
    }
  }

  /**
   * 触发事件
   * @param {string} event - 事件名称
   * @param {*} data - 事件数据
   */
  emit(event, data) {
    if (!this.events[event]) return;

    this.events[event].forEach(listener => {
      try {
        listener(data);
      } catch (error) {
        console.error(`事件监听器执行失败 [${event}]:`, error);
      }
    });
  }

  /**
   * 清空所有事件监听器
   */
  removeAllListeners() {
    this.events = {};
  }
}

module.exports = EventEmitter;
