
package de.ivu.elect.business.datei.boundary;

import java.util.function.Predicate;

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

import de.ivu.elect.business.datei.entity.DateiExport;
import de.ivu.elect.business.exchange.entity.DateiExportArt;
import de.ivu.elect.business.mandant.entity.Mandant;
import de.ivu.elect.business.wahl.entity.Wahl;
import de.ivu.elect.business.wahl.entity.Wahltermin;
import de.ivu.elect.presentation.exchange.ExportDescription;

@GroupedConversationScoped
@ConversationGroup(AbstractDateiExportSearchParameters.class)
public class DateiExportSearchParameters extends AbstractDateiExportSearchParameters {

  private static final long serialVersionUID = 1L;

  private DateiExportArt selectedExportArt;

  private boolean specificPerWahl;

  private boolean specificPerWahltermin;

  private Mandant mandant;

  private Wahl wahl;

  private Wahltermin wahltermin;

  private Predicate< ? super DateiExport> searchResultPredicate;

  public DateiExportSearchParameters() {
    super();
  }

  public Wahl getWahl() {
    return wahl;
  }

  public void setWahl(Wahl wahl) {
    this.wahl = wahl;
  }

  public Wahltermin getWahltermin() {
    return wahltermin;
  }

  public void setWahltermin(Wahltermin wahltermin) {
    this.wahltermin = wahltermin;
  }

  public DateiExportArt getSelectedExportArt() {
    return selectedExportArt;
  }

  public void setExportDescription(ExportDescription exportDescription) {
    this.selectedExportArt = exportDescription.getDateiExportArt();
    this.specificPerWahl = exportDescription.isSpecificPerWahl();
    this.specificPerWahltermin = exportDescription.isSpecificPerWahltermin();
  }

  public Wahl getSelectedWahlIfSpecificPerWahl() {
    if (isSpecificPerWahl()) {
      return getWahl();
    }

    return null;
  }

  public Wahltermin getSelectedWahlterminIfSpecificPerWahltermin() {
    if (isSpecificPerWahltermin()) {
      return getWahltermin();
    }

    return null;
  }

  public boolean isSpecificPerWahl() {
    return specificPerWahl;
  }

  public boolean isSpecificPerWahltermin() {
    return specificPerWahltermin;
  }

  public Mandant getMandant() {
    return mandant;
  }

  public void setMandant(Mandant mandant) {
    this.mandant = mandant;
  }

  public Predicate< ? super DateiExport> getSearchResultPredicate() {
    return searchResultPredicate;
  }

  public void setSearchResultPredicate(Predicate< ? super DateiExport> searchResultPredicate) {
    this.searchResultPredicate = searchResultPredicate;
  }

  @Override
  public void reset() {
    super.reset();

    searchResultPredicate = null;
  }
}
