
package de.ivu.elect.interfaces.core;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;

import de.ivu.elect.interfaces.core.konfiguration.Gebietsart;

/**
 * ELECT-7853 Wahltermin exportieren
 */
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
public class Wahltermin implements Serializable {

  private static final long serialVersionUID = 1L;

  @XmlElement(required = true)
  private WahlrechtStaatsangehoerigkeit buergerZugelassen;

  @XmlElement(required = false)
  private String farbe;

  @XmlElement(required = false)
  private String name;

  /**
   * NOTE ELECTMUC-1374, dass die Nummer -- sofern sie aktiviert ist (cf. WahlterminNummerRelevant) -- vom Anwender vergeben wird und daher fachlich relevant ist.
   */
  @XmlElement(required = true)
  private String nummer;

  @XmlElement(required = true)
  private Boolean stichwahlMoeglich;

  @XmlElement(required = false)
  private Date stichwahlWahldatum;

  @XmlElement(required = true)
  private Date wahldatum;

  @XmlElement(required = true)
  private String customData;

  @XmlElementWrapper(name = "dokumentvorlagen", nillable = true, required = false) // ELECTKOM-523
  @XmlElement(required = false, name = "dokumentvorlage", nillable = true)
  private List<DokumentVorlage> dokumentVorlagen = new ArrayList<>();

  @XmlElementWrapper(name = "wahlterminParameterList", nillable = false, required = true)
  @XmlElement(required = false, name = "wahlterminParameter", nillable = true)
  private List<WahlParameter> wahlterminParameterList = new ArrayList<>();

  @XmlElementWrapper(name = "wahlhelferbedarfGlobalList", nillable = false, required = true)
  @XmlElement(required = false, name = "wahlhelferbedarfGlobal", nillable = true)
  private List<Wahlhelferbedarf> wahlhelferbedarfGlobalList = new ArrayList<>();

  /**
   * NOTE, dass die Gebietsarten zwar nicht am Wahltermin hängen; jedoch sind Metadaten über die exportierten Gebiete zum Import wichtig. (Bspw.: haben wir hier einen Stimm-/Briefwahl-/Reservebezirk?
   * --> Gebiet --> Gebietsart --> Bezirksart)
   */
  @XmlElementWrapper(name = "gebietsartList", nillable = false, required = true)
  @XmlElement(required = false, name = "gebietsart", nillable = true)
  private List<Gebietsart> gebietsartList = new ArrayList<>();

  @XmlElementWrapper(name = "gebietList", nillable = false, required = true)
  @XmlElement(required = false, name = "gebiet", nillable = true)
  private List<Gebiet> gebietList = new ArrayList<>();

  @XmlElementWrapper(name = "organisationseinheitList", nillable = false, required = true)
  @XmlElement(required = false, name = "organisationseinheit", nillable = true)
  private List<Organisationseinheit> organisationseinheitList = new ArrayList<>();

  @XmlElementWrapper(name = "standortList", nillable = false, required = true)
  @XmlElement(required = false, name = "standort", nillable = true)
  private List<Standort> standortList = new ArrayList<>();

  @XmlElementWrapper(name = "wahlhelferEinsatzOrtList", nillable = false, required = true)
  @XmlElement(required = false, name = "wahlhelferEinsatzOrt", nillable = true)
  private List<WahlhelferEinsatzOrt> wahlhelferEinsatzOrtList = new ArrayList<>();

  @XmlElementWrapper(name = "wahlhelferList", nillable = false, required = true)
  @XmlElement(required = false, name = "wahlhelfer", nillable = true)
  private List<Wahlhelfer> wahlhelferList = new ArrayList<>();

  @XmlElementWrapper(name = "veranstaltungList", nillable = false, required = true)
  @XmlElement(required = false, name = "veranstaltung", nillable = true)
  private List<Veranstaltung> veranstaltungList = new ArrayList<>();

  @XmlElementWrapper(name = "entschaedigungsArtList", nillable = false, required = true)
  @XmlElement(required = false, name = "entschaedigungsArt", nillable = true)
  private List<EntschaedigungsArt> entschaedigungsArtList = new ArrayList<>();

  @XmlElementWrapper(name = "auszahlungList", nillable = false, required = true)
  @XmlElement(required = false, name = "auszahlung", nillable = true)
  private List<Auszahlung> auszahlungList = new ArrayList<>();

  @XmlElementWrapper(name = "entschaedigungList", nillable = false, required = true)
  @XmlElement(required = false, name = "entschaedigung", nillable = true)
  private List<Entschaedigung> entschaedigungList = new ArrayList<>();

  public Wahltermin() {
    super();
  }

  public WahlrechtStaatsangehoerigkeit getBuergerZugelassen() {
    return buergerZugelassen;
  }

  public void setBuergerZugelassen(WahlrechtStaatsangehoerigkeit buergerZugelassen) {
    this.buergerZugelassen = buergerZugelassen;
  }

  public String getFarbe() {
    return farbe;
  }

  public void setFarbe(String farbe) {
    this.farbe = farbe;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public String getNummer() {
    return nummer;
  }

  public void setNummer(String nummer) {
    this.nummer = nummer;
  }

  public Boolean getStichwahlMoeglich() {
    return stichwahlMoeglich;
  }

  public void setStichwahlMoeglich(Boolean stichwahlMoeglich) {
    this.stichwahlMoeglich = stichwahlMoeglich;
  }

  public Date getStichwahlWahldatum() {
    return stichwahlWahldatum;
  }

  public void setStichwahlWahldatum(Date stichwahlTermin) {
    this.stichwahlWahldatum = stichwahlTermin;
  }

  public Date getWahldatum() {
    return wahldatum;
  }

  public void setWahldatum(Date wahldatum) {
    this.wahldatum = wahldatum;
  }

  public String getCustomData() {
    return customData;
  }

  public void setCustomData(String customData) {
    this.customData = customData;
  }

  public List<Gebietsart> getGebietsartList() {
    return gebietsartList;
  }

  public void setGebietsartList(List<Gebietsart> gebietsartList) {
    this.gebietsartList = gebietsartList;
  }

  public List<Gebiet> getGebietList() {
    return gebietList;
  }

  public void setGebietList(List<Gebiet> gebietList) {
    this.gebietList = gebietList;
  }

  public List<Organisationseinheit> getOrganisationseinheitList() {
    return organisationseinheitList;
  }

  public void setOrganisationseinheitList(List<Organisationseinheit> organisationseinheitList) {
    this.organisationseinheitList = organisationseinheitList;
  }

  public List<Standort> getStandortList() {
    return standortList;
  }

  public void setStandortList(List<Standort> standortList) {
    this.standortList = standortList;
  }

  public List<WahlhelferEinsatzOrt> getWahlhelferEinsatzOrtList() {
    return wahlhelferEinsatzOrtList;
  }

  public void setWahlhelferEinsatzOrtList(List<WahlhelferEinsatzOrt> wahlhelferEinsatzOrtList) {
    this.wahlhelferEinsatzOrtList = wahlhelferEinsatzOrtList;
  }

  public List<Wahlhelferbedarf> getWahlhelferbedarfGlobalList() {
    return wahlhelferbedarfGlobalList;
  }

  public void setWahlhelferbedarfGlobalList(List<Wahlhelferbedarf> wahlhelferbedarfGlobalList) {
    this.wahlhelferbedarfGlobalList = wahlhelferbedarfGlobalList;
  }

  public List<DokumentVorlage> getDokumentvorlagen() {
    return dokumentVorlagen;
  }

  public void setDokumentVorlagen(List<DokumentVorlage> dokumentVorlagen) {
    this.dokumentVorlagen = dokumentVorlagen;
  }

  public List<WahlParameter> getWahlterminParameterList() {
    return wahlterminParameterList;
  }

  public void setWahlterminParameterList(List<WahlParameter> wahlterminParameterList) {
    this.wahlterminParameterList = wahlterminParameterList;
  }

  public List<Veranstaltung> getVeranstaltungList() {
    return veranstaltungList;
  }

  public void setVeranstaltungList(List<Veranstaltung> veranstaltungList) {
    this.veranstaltungList = veranstaltungList;
  }

  public List<EntschaedigungsArt> getEntschaedigungsArtList() {
    return entschaedigungsArtList;
  }

  public void setEntschaedigungsArtList(List<EntschaedigungsArt> entschaedigungsArtList) {
    this.entschaedigungsArtList = entschaedigungsArtList;
  }

  public List<Auszahlung> getAuszahlungList() {
    return auszahlungList;
  }

  public void setAuszahlungList(List<Auszahlung> auszahlungList) {
    this.auszahlungList = auszahlungList;
  }

  public List<Entschaedigung> getEntschaedigungList() {
    return entschaedigungList;
  }

  public void setEntschaedigungList(List<Entschaedigung> entschaedigungList) {
    this.entschaedigungList = entschaedigungList;
  }

  public List<Wahlhelfer> getWahlhelferList() {
    return wahlhelferList;
  }

  public void setWahlhelferList(List<Wahlhelfer> wahlhelferList) {
    this.wahlhelferList = wahlhelferList;
  }
}
