import {Command} from './command.js';

export class AddFilesCommand extends Command {
  constructor(element, selectedPages, addFilesAction, pagesContainer) {
    super();
    this.element = element;
    this.selectedPages = selectedPages;
    this.addFilesAction = addFilesAction;
    this.pagesContainer = pagesContainer;
    this.addedElements = [];
  }

  async execute() {
    const undoBtn = document.getElementById('undo-btn');
    undoBtn.disabled = true;
    if (this.element) {
      const newElement = await this.addFilesAction(this.element);
      if (newElement) {
        this.addedElements = newElement;
      }
    } else {
      const newElement = await this.addFilesAction(false);
      if (newElement) {
        this.addedElements = newElement;
      }
    }
    undoBtn.disabled = false;
  }

  undo() {
    this.addedElements.forEach((element) => {
      const nextSibling = element.nextSibling;
      this.pagesContainer.removeChild(element);

      if (this.pagesContainer.childElementCount === 0) {
        const filenameInput = document.getElementById('filename-input');
        const downloadBtn = document.getElementById('export-button');

        filenameInput.disabled = true;
        filenameInput.value = '';
        downloadBtn.disabled = true;
      }

      element._nextSibling = nextSibling;
    });
    this.addedElements = [];
  }
  redo() {
    this.execute();
  }
}