
package de.ivu.elect.dokumente.ergebnis;

import de.ivu.document.generator.template.annotations.DocumentSimpleField;
import de.ivu.elect.business.gebietsbaum.boundary.WahlverwaltungGebietInformation;
import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.jee.entity.customdata.EmptyCustomData;

public class ErgebnisDocumentErfassungsgebietDocument extends ErgebnisDocumentGebietDocument {

  private static final long serialVersionUID = 1L;

  private static final Gebiet EMPTY = new Gebiet(EmptyCustomData.INSTANCE);

  @DocumentSimpleField("Ist-Urnenwahlbezirk")
  public boolean isUrnenwahlbezirk;

  @DocumentSimpleField("Ist-Briefwahlbezirk")
  public boolean isBriefwahlbezirk;

  @DocumentSimpleField("Ist-Auswahlbezirk")
  public boolean isAuswahlbezirk;

  @DocumentSimpleField("Ist-Sonderwahlbezirk")
  public boolean isSonderstimmbezirk;

  @DocumentSimpleField("Ist-BeweglicherWahlvorstand")
  public boolean isBeweglicherWahlvorstand;

  @DocumentSimpleField("Ist-Ergebniseingabestatus-Eingabe-Beendet")
  public boolean isErgebniseingabestatusEingabeBeendet;

  @DocumentSimpleField("Ist-Ergebniseingabestatus-Gesperrt")
  public boolean isErgebniseingabestatusGesperrt;

  @DocumentSimpleField("Ist-Ergebniseingabestatus-Abgeschlossen")
  public boolean isErgebniseingabestatusAbgeschlossen;

  @DocumentSimpleField("Ist-Ergebniseingabestatus-Freigegeben")
  public boolean isErgebniseingabestatusFreigegeben;

  @DocumentSimpleField("Ist-Ergebniseingabestatus-Ausbleibend")
  public boolean isErgebniseingabestatusAusbleibend;

  public ErgebnisDocumentErfassungsgebietDocument() {
    this(EMPTY);
  }

  public ErgebnisDocumentErfassungsgebietDocument(WahlverwaltungGebietInformation erfassungsgebietInformation) {
    this(erfassungsgebietInformation.getGebiet().orElse(EMPTY));
  }

  public ErgebnisDocumentErfassungsgebietDocument(Gebiet erfassungsgebiet) {
    super(erfassungsgebiet.getName(), erfassungsgebiet.getNummer(), erfassungsgebiet.getNummerBezirkFallsGesetzt(), erfassungsgebiet.getKuerzel());

    this.isUrnenwahlbezirk = erfassungsgebiet.isUrnenwahlgebiet();
    this.isBriefwahlbezirk = erfassungsgebiet.isBriefwahlgebiet();

    this.isAuswahlbezirk = Boolean.TRUE.equals(erfassungsgebiet.getAuswahlbezirk());
    this.isSonderstimmbezirk = Boolean.TRUE.equals(erfassungsgebiet.getSonderstimmbezirk());
    this.isBeweglicherWahlvorstand = Boolean.TRUE.equals(erfassungsgebiet.getBeweglicherWahlvorstand());

    this.isErgebniseingabestatusEingabeBeendet = false;
    this.isErgebniseingabestatusGesperrt = false;
    this.isErgebniseingabestatusAbgeschlossen = false;
    this.isErgebniseingabestatusFreigegeben = false;
    this.isErgebniseingabestatusAusbleibend = false;
  }

  @Override
  public ErgebnisDocumentErfassungsgebietDocument copy() {
    return copy(new ErgebnisDocumentErfassungsgebietDocument());
  }

  protected ErgebnisDocumentErfassungsgebietDocument copy(ErgebnisDocumentErfassungsgebietDocument target) {
    super.copy(target);

    target.isUrnenwahlbezirk = isUrnenwahlbezirk;
    target.isBriefwahlbezirk = isBriefwahlbezirk;

    target.isAuswahlbezirk = isAuswahlbezirk;
    target.isSonderstimmbezirk = isSonderstimmbezirk;
    target.isBeweglicherWahlvorstand = isBeweglicherWahlvorstand;

    target.isErgebniseingabestatusEingabeBeendet = isErgebniseingabestatusEingabeBeendet;
    target.isErgebniseingabestatusGesperrt = isErgebniseingabestatusGesperrt;
    target.isErgebniseingabestatusAbgeschlossen = isErgebniseingabestatusAbgeschlossen;
    target.isErgebniseingabestatusFreigegeben = isErgebniseingabestatusFreigegeben;
    target.isErgebniseingabestatusAusbleibend = isErgebniseingabestatusAusbleibend;

    return target;
  }
}
