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

import java.util.Collection;

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

import de.ivu.elect.business.konfiguration.boundary.CustomParameterSearchParameters;
import de.ivu.elect.business.konfiguration.entity.CustomParameterKategorie;
import de.ivu.elect.business.konfiguration.entity.CustomParameterTemplate;
import de.ivu.elect.business.wahl.entity.Wahl;
import de.ivu.elect.business.wahl.entity.WahlParameterWerte;
import de.ivu.elect.business.wahl.entity.Wahltermin;


import static java.util.Arrays.asList;

@GroupedConversationScoped
@ConversationGroup(AbstractWahlParameterSearchParameters.class)
public class WahlParameterSearchParameters extends AbstractWahlParameterSearchParameters implements CustomParameterSearchParameters {

  private static final long serialVersionUID = 1L;

  private CustomParameterKategorie kategorie;

  private Wahl wahl;

  private Wahltermin wahltermin;

  private boolean wahlterminWahlGesetzt = false;

  @Override
  public Wahl getSelectedWahl() {
    if (wahlterminWahlGesetzt) {
      return wahl;
    }
    return super.getSelectedWahl();
  }

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

  @Override
  public Wahltermin getSelectedWahltermin() {
    if (wahlterminWahlGesetzt) {
      return wahltermin;
    }
    return super.getSelectedWahltermin();
  }

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

  public WahlParameterSearchParameters() {
    super();
  }

  @Override
  public CustomParameterKategorie getKategorie() {
    return kategorie;
  }

  @Override
  public void setKategorie(CustomParameterKategorie kategorie) {
    this.kategorie = kategorie;
  }

  @Override
  public Collection<CustomParameterTemplate> getSupportedTemplates() {
    return asList(WahlParameterWerte.values());
  }

  private boolean nurUngueltige;
  @Override
  public void setNurUngueltige(boolean nurUngueltige) {
    this.nurUngueltige = nurUngueltige;
  }

  @Override
  public boolean isNurUngueltige() {
    return nurUngueltige;
  }

  @Override
  public void reset() {
    super.reset();
    nurUngueltige = false;
    wahl = null;
    wahltermin = null;
    wahlterminWahlGesetzt = false;
  }

  public void setWahlterminWahlGesetzt(boolean b) {
    wahlterminWahlGesetzt = true;
  }
}
