export default class SimpleTaskbarProcessor {
  /**
   * Cria uma nova instância do processador de taskbar.
   * @param defaultButtons - Array com os botões padrão a serem exibidos
  */
  constructor(defaultButtons) {
    this._defaultButtons = [];
    this._defaultButtons = [...defaultButtons];
  }
  /**
   * Processa a taskbar aplicando regras de visibilidade e habilitação.
   * @param taskbarID - Identificador único da taskbar
   * @param taskbarManager - Gerenciador de taskbar com regras customizadas
   * @param dataState - Estado atual dos dados
   * @param disabledButtons - Array de botões desabilitados
   * @param invisibleButtons - Array de botões invisíveis
 */
  process(taskbarID, taskbarManager, dataState, disabledButtons = [], invisibleButtons = []) {
    var _a;
    this.taskbarID = taskbarID;
    this.customButtons = new Map();
    this.buttonsArray = [];
    this.disabledButtons = [...disabledButtons];
    (_a = this.getButtonsArray(taskbarManager, dataState)) === null || _a === void 0 ? void 0 : _a.forEach((btnDef) => {
      let buttonName;
      if (typeof btnDef === "string") {
        buttonName = btnDef;
      }
      else {
        this.customButtons.set(btnDef.name, btnDef);
        buttonName = btnDef.name;
      }
      if (!invisibleButtons.includes(buttonName)) {
        if (!this.isEnabled(taskbarManager, buttonName, dataState, disabledButtons)) {
          this.disabledButtons.push(buttonName);
        }
        this.buttonsArray.push(buttonName);
      }
    });
    this.buttons = this.buttonsArray.join(",");
  }
  getButtonsArray(taskbarManager, dataState) {
    if (taskbarManager) {
      return taskbarManager.getButtons(this.taskbarID, dataState, [...this._defaultButtons]);
    }
    return this._defaultButtons;
  }
  isEnabled(taskbarManager, buttonName, dataState, disabled) {
    const originalValue = !disabled.includes(buttonName);
    if (taskbarManager && taskbarManager.isEnabled) {
      return taskbarManager.isEnabled(this.taskbarID, dataState, buttonName, originalValue);
    }
    return originalValue;
  }
}
