/**
 * Executor 基类
 * 执行器的基类，定义执行器接口
 */

const { EventEmitter } = require('../utils/event-emitter');

class ExecutorBase extends EventEmitter {
  /**
   * @param {string} name - 执行器名称
   */
  constructor(name) {
    super();
    this.name = name;
    this._enabled = true;
  }

  /**
   * 执行
   * @param {Object} params - 执行参数
   * @returns {Promise<any>}
   */
  async execute(params) {
    throw new Error('execute() must be implemented');
  }

  /**
   * 启用执行器
   */
  enable() {
    this._enabled = true;
    return this;
  }

  /**
   * 禁用执行器
   */
  disable() {
    this._enabled = false;
    return this;
  }

  /**
   * 是否启用
   */
  isEnabled() {
    return this._enabled;
  }

  /**
   * 销毁
   */
  destroy() {
    this.removeAllListeners();
  }
}

module.exports = { ExecutorBase };
