
package de.ivu.elect.dokumente.gebiet;

import de.ivu.document.generator.template.BaseDocument;
import de.ivu.document.generator.template.annotations.DocumentSimpleField;
import de.ivu.elect.business.gebietsbaum.boundary.WahlverwaltungGemeindeAgs8;
import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.dokumente.BaseElectContext;

public class BasicGebietDokument extends BaseDocument {

  private static final long serialVersionUID = 1L;

  public static final BasicGebietDokument EMPTY_OBJECT = new BasicGebietDokument();

  @DocumentSimpleField("ID")
  public final Long id;

  @DocumentSimpleField("Name")
  public final String name;

  @DocumentSimpleField("Nummer")
  public final String nummer;

  @DocumentSimpleField("Nummer (formatiert)")
  public final String nummerFormatiert;

  @DocumentSimpleField("Nummer (formatiert, AGS8)")
  public final String nummerFormatiertAgs8; // ELECT-9467

  @DocumentSimpleField("Nummer (eindeutig)")
  public final String nummerEindeutig;

  @DocumentSimpleField("Art")
  public final String art;

  @DocumentSimpleField("CustomData")
  public final Object customData;

  @DocumentSimpleField("Kuerzel")
  public final String kuerzel;

  @DocumentSimpleField("ExterneId")
  public final String externeId;

  @DocumentSimpleField("IstWurzelgebiet")
  public final boolean wurzelgebiet;

  public BasicGebietDokument() {
    super();

    this.id = null;

    this.name = "";
    this.nummer = "";
    this.nummerFormatiert = "";
    this.nummerFormatiertAgs8 = new WahlverwaltungGemeindeAgs8(this.nummer).getGemeindeschluessel();
    this.nummerEindeutig = "";

    this.externeId = "";
    this.kuerzel = "";

    this.art = "";
    this.wurzelgebiet = false;
    this.customData = null;
  }

  public BasicGebietDokument(BaseElectContext baseElectContext, Gebiet gebiet) {
    super();

    this.id = gebiet.getId();

    this.name = gebiet.getName();
    this.nummer = gebiet.getNummerBezirkFallsGesetzt();
    this.nummerFormatiert = baseElectContext.getGebietNummerFormatter().getNummer(gebiet);
    this.nummerFormatiertAgs8 = new WahlverwaltungGemeindeAgs8(this.nummer).getGemeindeschluessel();
    this.nummerEindeutig = gebiet.getNummer();

    this.externeId = gebiet.getExterneId();
    this.kuerzel = gebiet.getKuerzel();

    this.art = gebiet.getGebietsart().getGebietsartTitle();
    this.wurzelgebiet = gebiet.isWurzelgebiet();
    this.customData = baseElectContext.getCustomDataDocumentBuilder().getGebietCustomDataDocumentBuilder().createCustomData(baseElectContext, gebiet);
  }

  public BasicGebietDokument(BaseElectContext baseElectContext, String name, String nummer) {
    this(baseElectContext, name, nummer, "");
  }

  public BasicGebietDokument(BaseElectContext baseElectContext, String name, String nummer, String art) {
    super();

    this.id = null;

    this.name = name;
    this.nummer = nummer;
    this.nummerFormatiert = nummer; // ELECT-9996
    this.nummerFormatiertAgs8 = new WahlverwaltungGemeindeAgs8(this.nummer).getGemeindeschluessel();
    this.nummerEindeutig = nummer;

    this.externeId = "";
    this.kuerzel = "";

    this.art = art;
    this.wurzelgebiet = false;
    this.customData = null;
  }
}
