// SimplifiedEventBus.js - 简化版事件系统API
import EventBus from './EventBus.js';

/**
 * 简化版事件总线
 * 参考PixiJS、Egret和Vue 3的设计理念
 */
class SimplifiedEventBus extends EventBus {
  constructor() {
    super();
    
    // 创建简化API的快捷方法
    this._createSimplifiedAPI();
  }
  
  /**
   * 创建简化API的快捷方法
   */
  _createSimplifiedAPI() {
    // 简化的事件绑定API
    this.on = this._on.bind(this);
    
    // 简化的事件解绑API
    this.off = this._off.bind(this);
    
    // 简化的事件触发API
    this.emit = this._emit.bind(this);
    
    // 简化的一次性事件绑定API
    this.once = this._once.bind(this);
  }
  
  /**
   * 简化的事件绑定API
   * @param {string} event - 事件名称
   * @param {function} callback - 回调函数
   * @param {object} context - 上下文
   * @returns {EventBus} 事件总线实例
   */
  _on(event, callback, context) {
    return this.on(event, callback, context);
  }
  
  /**
   * 简化的事件解绑API
   * @param {string} event - 事件名称
   * @param {function} callback - 回调函数
   * @param {object} context - 上下文
   * @returns {EventBus} 事件总线实例
   */
  _off(event, callback, context) {
    return this.off(event, callback, context);
  }
  
  /**
   * 简化的事件触发API
   * @param {string} event - 事件名称
   * @param {any} data - 事件数据
   * @returns {EventBus} 事件总线实例
   */
  _emit(event, data) {
    return this.emit(event, data);
  }
  
  /**
   * 简化的一次性事件绑定API
   * @param {string} event - 事件名称
   * @param {function} callback - 回调函数
   * @param {object} context - 上下文
   * @returns {EventBus} 事件总线实例
   */
  _once(event, callback, context) {
    const onceCallback = (...args) => {
      this.off(event, onceCallback, context);
      callback.apply(context, args);
    };
    
    return this.on(event, onceCallback, context);
  }
  
  /**
   * 简化的事件监听器数量获取API
   * @param {string} event - 事件名称
   * @returns {number} 监听器数量
   */
  listenerCount(event) {
    if (this.events[event]) {
      return this.events[event].length;
    }
    return 0;
  }
  
  /**
   * 简化的事件监听器获取API
   * @param {string} event - 事件名称
   * @returns {array} 监听器数组
   */
  listeners(event) {
    if (this.events[event]) {
      return this.events[event].slice();
    }
    return [];
  }
  
  /**
   * 简化的事件系统重置API
   * @returns {EventBus} 事件总线实例
   */
  reset() {
    this.events = {};
    return this;
  }
}

// 创建全局事件总线实例
const eventBus = new SimplifiedEventBus();

// 导出简化版事件总线
export { SimplifiedEventBus, eventBus };

// 导出常用的事件名称常量
export const EVENTS = {
  // 鼠标事件
  MOUSE_DOWN: 'mouseDown',
  MOUSE_UP: 'mouseUp',
  MOUSE_MOVE: 'mouseMove',
  CLICK: 'click',
  DBL_CLICK: 'dblClick',
  
  // 键盘事件
  KEY_DOWN: 'keyDown',
  KEY_UP: 'keyUp',
  
  // 游戏事件
  GAME_START: 'gameStart',
  GAME_PAUSE: 'gamePause',
  GAME_RESUME: 'gameResume',
  GAME_OVER: 'gameOver',
  
  // 场景事件
  SCENE_CREATED: 'sceneCreated',
  SCENE_CHANGED: 'sceneChanged',
  
  // 资源事件
  ASSET_LOADED: 'assetLoaded',
  ASSET_ERROR: 'assetError',
  
  // 动画事件
  ANIMATION_START: 'animationStart',
  ANIMATION_UPDATE: 'animationUpdate',
  ANIMATION_COMPLETE: 'animationComplete',
  
  // 音频事件
  SOUND_PLAY: 'soundPlay',
  SOUND_STOP: 'soundStop',
  MUSIC_PLAY: 'musicPlay',
  MUSIC_STOP: 'musicStop'
};