
package de.ivu.elect.presentation.dokumente.exchange;

import java.io.Serializable;

import javax.inject.Inject;

import org.apache.deltaspike.core.api.scope.ConversationGroup;

import de.ivu.elect.business.datei.boundary.DateiExportConversationSelect;
import de.ivu.elect.business.datei.entity.DateiExport;
import de.ivu.elect.business.datei.entity.FileType;
import de.ivu.elect.presentation.exchange.action.DateiExportDownloadAction;

public class DokumentBulkExport implements Serializable {

  private static final long serialVersionUID = 1L;

  @Inject
  @ConversationGroup(DokumentBulkExportSearchEntryConversationSelect.class)
  private transient DokumentBulkExportSearchEntryConversationSelect dokumentBulkExportSearchEntryConversationSelect;

  @Inject
  private transient DateiExportConversationSelect dateiExportConversationSelect;

  @Inject
  private transient DateiExportDownloadAction dateiExportDownloadAction;

  public DokumentBulkExport() {
    super();
  }

  public DokumentBulkExportSearchEntry getSelectedDokument() {
    return dokumentBulkExportSearchEntryConversationSelect.getEntry();
  }

  public void setSelectedDokument(DokumentBulkExportSearchEntry dokumentBulkExportSearchEntry, FileType finaleKonvertierung) {
    dokumentBulkExportSearchEntryConversationSelect.setEntry(dokumentBulkExportSearchEntry);
    dokumentBulkExportSearchEntryConversationSelect.setFinaleKonvertierung(finaleKonvertierung);
  }

  public void exportDokument() {
    exportDokument(getSelectedDokument(), dokumentBulkExportSearchEntryConversationSelect.getFinaleKonvertierung());
  }

  public void exportDokument(DokumentBulkExportSearchEntry dokumentBulkExportSearchEntry, FileType finaleKonvertierung) {
    reset();

    if (dokumentBulkExportSearchEntry != null) {
      dokumentBulkExportSearchEntry.export(finaleKonvertierung).ifPresent(dateiExportConversationSelect::setEntity);
    }
  }

  public boolean isDokumentDownloadable() {
    return dateiExportConversationSelect.isSelected();
  }

  public void downloadDokument() {
    DateiExport dateiExport = dateiExportConversationSelect.getEntity();

    if (dateiExport == null) { // ELECTMUC-982
      dateiExportConversationSelect.clearEntity();

      dateiExport = DateiExport.DUMMY;
    }

    dateiExportDownloadAction.doIt(dateiExport);
  }

  public void clearDownload() {
    dateiExportConversationSelect.setEntity((DateiExport) null);
  }

  public void reset() {
    dokumentBulkExportSearchEntryConversationSelect.clear();

    dateiExportConversationSelect.clearEntity();
  }
}
