
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;

  @DocumentSimpleField("Ist-Wird-In-Anderem-Gebiet-Erfasst")
  public boolean isWirdInAnderemGebietErfasst;

  @DocumentSimpleField("Wird-Erfasst-In-Gebiet")
  public String wirdErfasstInGebiet;

  @DocumentSimpleField("Ist-Erfasst-Andere-Gebiete")
  public boolean isErfasstAndereGebiet;

  @DocumentSimpleField("Erfasst-Auch-Fuer-Gebiete")
  public String erfasstAuchFuerGebiete;

  public ErgebnisDocumentErfassungsgebietDocument() {
    this(EMPTY);
  }

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

  private 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;

    this.isWirdInAnderemGebietErfasst = false;
    this.wirdErfasstInGebiet = "";

    this.isErfasstAndereGebiet = false;
    this.erfasstAuchFuerGebiete = "";
  }

  @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;

    // ELECT-12557
    target.isWirdInAnderemGebietErfasst = isWirdInAnderemGebietErfasst;
    target.wirdErfasstInGebiet = wirdErfasstInGebiet;

    target.isErfasstAndereGebiet = isErfasstAndereGebiet;
    target.erfasstAuchFuerGebiete = erfasstAuchFuerGebiete;

    return target;
  }

  @Override
  public String toString() {
    return "ErgebnisDocumentErfassungsgebietDocument [isUrnenwahlbezirk=" + isUrnenwahlbezirk + ", isBriefwahlbezirk=" + isBriefwahlbezirk + ", isAuswahlbezirk=" + isAuswahlbezirk
        + ", isSonderstimmbezirk=" + isSonderstimmbezirk + ", isBeweglicherWahlvorstand=" + isBeweglicherWahlvorstand + ", isErgebniseingabestatusEingabeBeendet="
        + isErgebniseingabestatusEingabeBeendet + ", isErgebniseingabestatusGesperrt=" + isErgebniseingabestatusGesperrt + ", isErgebniseingabestatusAbgeschlossen="
        + isErgebniseingabestatusAbgeschlossen + ", isErgebniseingabestatusFreigegeben=" + isErgebniseingabestatusFreigegeben + ", isErgebniseingabestatusAusbleibend="
        + isErgebniseingabestatusAusbleibend + ", isWirdInAnderemGebietErfasst=" + isWirdInAnderemGebietErfasst + ", isErfasstAndereGebiet=" + isErfasstAndereGebiet + ", wirdErfasstInGebiet="
        + wirdErfasstInGebiet + ", erfasstAuchFuerGebiete=" + erfasstAuchFuerGebiete + ", name=" + name + ", nummer=" + nummer + ", nummerFormatiert=" + nummerFormatiert + ", kuerzel=" + kuerzel
        + "]";
  }
}
