import { DataExporterOption } from "../../../lib/@types";
export class ItemBuilder {
  constructor(getMessage, selectedNumber) {
    this._selectedNumber = 0;
    this._getMessage = getMessage;
    this._selectedNumber = selectedNumber;
  }
  /**
   * Método responsável por inserir os items no array de opções.
   * @param option - Nome da opção que será inserida no array.
   * @param items - Array que será alimentado com as opções permitidas.
   */
  setExportOption(option, items) {
    const groupName = this.getExportGroupName();
    if (option === DataExporterOption.EXPORT_TO_PDF) {
      items.push(this.getExportToPDF(groupName));
    }
    if (option === DataExporterOption.EXPORT_TO_XLS) {
      items.push(this.getExportToXLS(groupName));
    }
    this.setExportCurrentPage(option, items);
    if (this._selectedNumber > 0) {
      this.setExportAllRecords(option, items);
    }
    this.setExportByEmail(option, items);
  }
  /**
   * Método responsável por inserir os itens de exportação personalizada.
   * @param option - Nome da opção que será inserida no array.
   * @param items - Array que será alimentado com as opções permitidas.
   */
  setExportCurrentPage(option, items) {
    var _a;
    const pageOptions = [DataExporterOption.EXPORT_PAGE_TO_PDF, DataExporterOption.EXPORT_PAGE_TO_XLS];
    if (option === DataExporterOption.EXPORT_CURRENT_PAGE) {
      items.push(this.getCurrentPage());
    }
    if (pageOptions.includes(option)) {
      let item = items.find((item) => item.id === DataExporterOption.EXPORT_CURRENT_PAGE);
      if (item == undefined) {
        items.push(this.getCurrentPage());
        item = items.find((item) => item.id === DataExporterOption.EXPORT_CURRENT_PAGE);
      }
      if (!((_a = item === null || item === void 0 ? void 0 : item.children) === null || _a === void 0 ? void 0 : _a.length)) {
        item.children = [];
      }
      if (option === DataExporterOption.EXPORT_PAGE_TO_PDF) {
        item.children.push(this.getExportPageToPDF());
      }
      if (option === DataExporterOption.EXPORT_PAGE_TO_XLS) {
        item.children.push(this.getExportPageToXLS());
      }
    }
  }
  /**
   * Método responsável por inserir os itens de exportação para todos os registros.
   * @param option - Nome da opção que será inserida no array.
   * @param items - Array que será alimentado com as opções permitidas.
   */
  setExportAllRecords(option, items) {
    var _a;
    const pageOptions = [DataExporterOption.EXPORT_ALL_RECORDS_TO_PDF, DataExporterOption.EXPORT_ALL_RECORDS_TO_XLS];
    if (option === DataExporterOption.EXPORT_ALL_RECORDS) {
      items.push(this.getAllRecords());
    }
    if (pageOptions.includes(option)) {
      let item = items.find((item) => item.id === DataExporterOption.EXPORT_ALL_RECORDS);
      if (item == undefined) {
        items.push(this.getAllRecords());
        item = items.find((item) => item.id === DataExporterOption.EXPORT_ALL_RECORDS);
      }
      if (!((_a = item.children) === null || _a === void 0 ? void 0 : _a.length)) {
        item.children = [];
      }
      if (option === DataExporterOption.EXPORT_ALL_RECORDS_TO_PDF) {
        item.children.push(this.getExportAllRecordsToPDF());
      }
      if (option === DataExporterOption.EXPORT_ALL_RECORDS_TO_XLS) {
        item.children.push(this.getExportAllRecordsToXLS());
      }
    }
  }
  /**
   * Método responsável por inserir os itens de exportação por e-mail.
   * @param option - Nome da opção que será inserida no array.
   * @param items - Array que será alimentado com as opções permitidas.
   */
  setExportByEmail(option, items) {
    if (option === DataExporterOption.EXPORT_BY_EMAIL) {
      items.push(this.getExportByEmail());
    }
  }
  /**
   * Método responsável por capturar o objeto com os dados de exportação em PDF.
   * @param groupName - Nome do grupo da opção que será inserida na lista.
   * @returns Retorna o objeto com os dados de exportação em PDF.
   */
  getExportToPDF(groupName) {
    return {
      id: DataExporterOption.EXPORT_TO_PDF,
      label: "PDF (.pdf)",
      group: groupName
    };
  }
  /**
   * Método responsável por capturar o objeto com os dados de exportação em XLS.
   * @param groupName - Nome do grupo da opção que será inserida na lista.
   * @returns Retorna o objeto com os dados de exportação em XLS.
   */
  getExportToXLS(groupName) {
    return {
      id: DataExporterOption.EXPORT_TO_XLS,
      label: `${this._getMessage("snkDataExporter.label.spreadsheet")} (.xls)`,
      group: groupName
    };
  }
  /**
   * Método responsável por capturar o objeto com os dados de exportação personalizada.
   * @returns Retorna o objeto com os dados de exportação personalizada.
   */
  getCurrentPage() {
    return {
      id: DataExporterOption.EXPORT_CURRENT_PAGE,
      label: this._getMessage("snkDataExporter.label.currentPage"),
      group: this._getMessage("snkDataExporter.group.custom")
    };
  }
  /**
   * Método responsável por capturar o objeto com todos os dados de exportação.
   * @returns Retorna o objeto com todos os dados de exportação.
   */
  getAllRecords() {
    return {
      id: DataExporterOption.EXPORT_ALL_RECORDS,
      label: this._getMessage("snkDataExporter.label.allRecords"),
      group: this._getMessage("snkDataExporter.group.custom")
    };
  }
  /**
   * Método responsável por capturar o objeto com os dados de exportação personalizada em PDF.
   * @returns Retorna o objeto com os dados de exportação personalizada em PDF.
   */
  getExportPageToPDF() {
    return {
      id: DataExporterOption.EXPORT_PAGE_TO_PDF,
      label: "PDF (.pdf)"
    };
  }
  /**
   * Método responsável por capturar o objeto com os dados de exportação personalizada em XLS.
   * @returns Retorna o objeto com os dados de exportação personalizada em XLS.
   */
  getExportPageToXLS() {
    return {
      id: DataExporterOption.EXPORT_PAGE_TO_XLS,
      label: `${this._getMessage("snkDataExporter.label.spreadsheet")} (.xls)`
    };
  }
  /**
   * Método responsável por capturar o objeto com todos os dados de exportação em PDF.
   * @returns Retorna o objeto com todos os dados de exportação em PDF.
   */
  getExportAllRecordsToPDF() {
    return {
      id: DataExporterOption.EXPORT_ALL_RECORDS_TO_PDF,
      label: "PDF (.pdf)"
    };
  }
  /**
   * Método responsável por capturar o objeto com todos os dados de exportação em XLS.
   * @returns Retorna o objeto com todos os dados de exportação em XLS.
   */
  getExportAllRecordsToXLS() {
    return {
      id: DataExporterOption.EXPORT_ALL_RECORDS_TO_XLS,
      label: `${this._getMessage("snkDataExporter.label.spreadsheet")} (.xlsx)`
    };
  }
  /**
   * Método responsável por capturar o objeto com os dados de exportação por e-mail.
   * @returns Retorna o objeto com os dados de exportação por e-mail.
   */
  getExportByEmail() {
    return {
      id: DataExporterOption.EXPORT_BY_EMAIL,
      label: `${this._getMessage("snkDataExporter.label.sendByEmail")}...`
    };
  }
  /**
   * Método responsável por capturar o nome do grupo da opção que será inserida na lista.
   * @returns Retorna o nome do grupo da opção que será inserida na lista.
   */
  getExportGroupName() {
    if (this._selectedNumber === 1) {
      return this._getMessage("snkDataExporter.group.export.selectedLine");
    }
    if (this._selectedNumber > 1) {
      return this._getMessage("snkDataExporter.group.export.multiSelected").replace('{0}', this._selectedNumber.toString());
    }
    return this._getMessage("snkDataExporter.group.export.default");
  }
}
