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

import static java.util.Collections.emptyList;

import java.util.ArrayList;
import java.util.List;

import javax.inject.Inject;

import de.ivu.elect.business.ergebnis.boundary.ErgebnisExtendedDAO;
import de.ivu.elect.business.ergebnis.boundary.ErgebnisSessionSelect;
import de.ivu.elect.business.ergebnis.boundary.ErgebnisdokumentTypPerWahlartResolver;
import de.ivu.elect.business.ergebnis.control.ErgebnisExchangeContext;
import de.ivu.elect.business.ergebnis.entity.Ergebnis;
import de.ivu.elect.business.kandidatur.control.StimmzettelFormatterKandidaturFormatDarstellung;
import de.ivu.elect.business.wahl.entity.Wahl;
import de.ivu.elect.presentation.dokumente.exchange.AbstractDokumentBulkExportSubView;
import de.ivu.elect.presentation.dokumente.exchange.AbstractDokumentBulkExportSubViewFactory;

public class ErgebnisdokumentBulkExportSubViewFactory extends AbstractDokumentBulkExportSubViewFactory {

  private static final StimmzettelFormatterKandidaturFormatDarstellung KANDIDATUR_FORMAT_DARSTELLUNG_DEFAULT = ErgebnisExchangeContext.KANDIDATUR_FORMAT_DARSTELLUNG_NOT_CONFIGURED;

  @Inject
  protected transient ErgebnisExtendedDAO ergebnisExtendedDAO;

  @Inject
  protected transient ErgebnisSessionSelect ergebnisSessionSelect;

  @Inject
  protected transient ErgebnisdokumentTypPerWahlartResolver ergebnisdokumentTypPerWahlartResolver;

  @Inject
  protected transient ErgebnisdokumentBulkExportDokumentVorlageFilter dokumentVorlageFilter;

  public ErgebnisdokumentBulkExportSubViewFactory() {
    super();
  }

  @Override
  protected List<AbstractDokumentBulkExportSubView< ? , ? , ? >> collectDokumentBulkExportSubViewsSupported(Wahl wahl) {
    if (isErgebnisSelected()) {
      return new ArrayList<>(collectErgebnisdokumentBulkExportSubViewsSupported(getSelectedErgebnis()));
    }

    return emptyList();
  }

  protected List<AbstractErgebnisdokumentBulkExportSubView< ? , ? , ? >> collectErgebnisdokumentBulkExportSubViewsSupported(Ergebnis ergebnis) {
    return emptyList(); // TO BE OVERRIDDEN!!!
  }

  protected boolean isErgebnisSelected() {
    return ergebnisSessionSelect.isSelected();
  }

  protected Ergebnis getSelectedErgebnis() {
    return ergebnisSessionSelect.getEntity();
  }

  protected ErgebnisdokumentTypPerWahlartResolver getErgebnisdokumentTypPerWahlartResolver() {
    return ergebnisdokumentTypPerWahlartResolver;
  }

  protected StimmzettelFormatterKandidaturFormatDarstellung getKandidaturFormatDarstellung() {
    return KANDIDATUR_FORMAT_DARSTELLUNG_DEFAULT;
  }

  protected ErgebnisdokumentBulkExportDokumentVorlageFilter getDokumentVorlageFilter() {
    return dokumentVorlageFilter;
  }
}
