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

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

import de.ivu.elect.business.kandidatur.entity.Kandidatur;
import de.ivu.elect.business.wahlrechtspruefung.entity.Pruefkriterium;
import de.ivu.elect.business.wahlrechtspruefung.entity.WahlrechtspruefStatus;
import de.ivu.elect.business.wahlrechtspruefung.entity.Wahlrechtspruefung;
import de.ivu.elect.business.wahlrechtspruefung.entity.WahlrechtspruefungObjekt;
import de.ivu.elect.business.wahlvorschlag.entity.Wahlvorschlag;

@GroupedConversationScoped
@ConversationGroup(AbstractWahlrechtspruefungSearchParameters.class)
public class WahlrechtspruefungSearchParameters extends AbstractWahlrechtspruefungSearchParameters {

  private static final long serialVersionUID = 1L;

  private Pruefkriterium pruefkriterium;

  private Wahlrechtspruefung wahlrechtspruefung;

  private Wahlvorschlag wahlvorschlag;

  private Kandidatur kandidatur;

  public WahlrechtspruefungSearchParameters() {
    super();
  }

  public boolean isNurSofortpruefungen() {
    return getPruefkriterium().getTeilDerSofortpruefung();
  }

  public void setNurSofortpruefungen(boolean nurSofortpruefungen) {
    getPruefkriterium().setTeilDerSofortpruefung(nurSofortpruefungen);
  }

  public String getKategorie() {
    return getPruefkriterium().getKategorie();
  }

  public void setKategorie(String kategorie) {
    getPruefkriterium().setKategorie(kategorie);
  }

  public String getUnterkategorie() {
    return getPruefkriterium().getUnterkategorie();
  }

  public void setUnterkategorie(String unterkategorie) {
    getPruefkriterium().setUnterkategorie(unterkategorie);
  }

  public Boolean isWahlrechtlichRelevant() {
    return getPruefkriterium().getWahlrechtlichRelevant();
  }

  public void setWahlrechtlichRelevant(Boolean wahlrechtlichRelevant) {
    getPruefkriterium().setWahlrechtlichRelevant(wahlrechtlichRelevant);
  }

  public Wahlvorschlag getWahlvorschlag() {
    return wahlvorschlag;
  }

  public void setWahlvorschlag(Wahlvorschlag wahlvorschlag) {
    this.wahlvorschlag = wahlvorschlag;
  }

  public Kandidatur getKandidatur() {
    return kandidatur;
  }

  public void setKandidatur(Kandidatur kandidatur) {
    this.kandidatur = kandidatur;
  }

  public WahlrechtspruefStatus getWahlrechtspruefStatus() {
    return getWahlrechtspruefung().getWahlrechtspruefStatus();
  }

  public void setWahlrechtspruefStatus(WahlrechtspruefStatus wahlrechtspruefStatus) {
    getWahlrechtspruefung().setWahlrechtspruefStatus(wahlrechtspruefStatus);
  }

  @Override
  public String toString() {
    return "WahlrechtspruefungSearchParameters{" + "nurSofortpruefungen=" + isNurSofortpruefungen() + ", kategorie='" + getKategorie()
        + '\'' + ", wahlrechtspruefStatus='" + getWahlrechtspruefStatus() + '\'' + ", unterkategorie='" + getUnterkategorie() + '\''
        + ", wahlvorschlag=" + wahlvorschlag + ", kandidatur=" + kandidatur + '}';
  }

  public Pruefkriterium getPruefkriterium() {
    if (pruefkriterium == null) {
      pruefkriterium = new Pruefkriterium();
      pruefkriterium.setTeilDerSofortpruefung(Boolean.FALSE);
      pruefkriterium.setWahlrechtlichRelevant(Boolean.FALSE);
    }

    return pruefkriterium;
  }

  public Wahlrechtspruefung getWahlrechtspruefung() {
    if (wahlrechtspruefung == null) {
      wahlrechtspruefung = new Wahlrechtspruefung();
      wahlrechtspruefung.setWahlrechtspruefStatus(null);
    }

    return wahlrechtspruefung;
  }

  public void apply(WahlrechtspruefungObjekt wahlrechtspruefungObjekt) {
    setWahlvorschlag(wahlrechtspruefungObjekt.getWahlvorschlag());
    setKandidatur(wahlrechtspruefungObjekt.getKandidatur());
  }

  @Override
  public void reset() {
    pruefkriterium = null;
    wahlrechtspruefung = null;

    super.reset();
  }
}
