
package de.ivu.elect.core.exchange.stimmen.csv;

import org.jsefa.csv.annotation.CsvDataType;
import org.jsefa.csv.annotation.CsvField;

import de.ivu.elect.business.gebietsbaum.entity.Gebiet;
import de.ivu.elect.exchange.BaseDTO;
import de.ivu.jsefa.CsvHeader;

@CsvDataType
public abstract class AbstractStimmenCsvDTO extends BaseDTO implements StimmenCsvDTO {

  public static final int LETZTE_POSITION = 8;

  @CsvField(pos = 1)
  @CsvHeader("Gebietsart")
  private String gebietsart;

  @CsvField(pos = 2)
  @CsvHeader("Gebietsnummer")
  private String gebietsnummer;

  @CsvField(pos = 3)
  @CsvHeader("Wahlberechtigte ohne Wahlschein")
  private Long anzahlWahlberechtigteOhneWahlschein;

  @CsvField(pos = 4)
  @CsvHeader("Wahlberechtigte mit Wahlschein")
  private Long anzahlWahlberechtigteMitWahlschein;

  @CsvField(pos = 5)
  @CsvHeader("Wahlberechtigte nicht im Wählerverzeichnis")
  private Long anzahlWahlberechtigteNichtImWaehlerverzeichnis;

  @CsvField(pos = 6)
  @CsvHeader("Wähler ohne Wahlschein")
  private Long anzahlWaehlerOhneWahlschein;

  @CsvField(pos = 7)
  @CsvHeader("Wähler mit Wahlschein")
  private Long anzahlWaehlerMitWahlschein;

  // ELECT-9319, bisher NIE ausgetauscht!
  private Long anzahlWaehlerMitWahlscheinInUrnenwahlAnzahlAusUrnenwahl;

  @CsvField(pos = LETZTE_POSITION)
  @CsvHeader("Briefwähler in Urnenwahlgebiet erfasst")
  private Long anzahlWaehlerMitWahlscheinInUrnenwahlAnzahlAusBriefwahl;

  private Gebiet gebiet;

  protected AbstractStimmenCsvDTO() {
    super();
  }

  @Override
  public Gebiet getGebiet() {
    return gebiet;
  }

  @Override
  public void setGebiet(Gebiet gebiet) {
    this.gebiet = gebiet;

    setGebietsnummer(gebiet.getNummer());
    setGebietsart(gebiet.getGebietsart().getName());
  }

  @Override
  public String getGebietsart() {
    return gebietsart;
  }

  @Override
  public void setGebietsart(String gebietsart) {
    this.gebietsart = gebietsart;
  }

  @Override
  public String getGebietsnummer() {
    return gebietsnummer;
  }

  @Override
  public void setGebietsnummer(String gebietsnummer) {
    this.gebietsnummer = gebietsnummer;
  }

  @Override
  public Long getAnzahlWahlberechtigteOhneWahlschein() {
    return anzahlWahlberechtigteOhneWahlschein;
  }

  @Override
  public void setAnzahlWahlberechtigteOhneWahlschein(Long anzahlWahlberechtigteOhneWahlschein) {
    this.anzahlWahlberechtigteOhneWahlschein = anzahlWahlberechtigteOhneWahlschein;
  }

  @Override
  public Long getAnzahlWahlberechtigteMitWahlschein() {
    return anzahlWahlberechtigteMitWahlschein;
  }

  @Override
  public void setAnzahlWahlberechtigteMitWahlschein(Long anzahlWahlberechtigteMitWahlschein) {
    this.anzahlWahlberechtigteMitWahlschein = anzahlWahlberechtigteMitWahlschein;
  }

  @Override
  public Long getAnzahlWahlberechtigteNichtImWaehlerverzeichnis() {
    return anzahlWahlberechtigteNichtImWaehlerverzeichnis;
  }

  @Override
  public void setAnzahlWahlberechtigteNichtImWaehlerverzeichnis(Long anzahlWahlberechtigteNichtImWaehlerverzeichnis) {
    this.anzahlWahlberechtigteNichtImWaehlerverzeichnis = anzahlWahlberechtigteNichtImWaehlerverzeichnis;
  }

  @Override
  public Long getAnzahlWaehlerOhneWahlschein() {
    return anzahlWaehlerOhneWahlschein;
  }

  @Override
  public void setAnzahlWaehlerOhneWahlschein(Long anzahlWaehlerOhneWahlschein) {
    this.anzahlWaehlerOhneWahlschein = anzahlWaehlerOhneWahlschein;
  }

  @Override
  public Long getAnzahlWaehlerMitWahlschein() {
    return anzahlWaehlerMitWahlschein;
  }

  @Override
  public void setAnzahlWaehlerMitWahlschein(Long anzahlWaehlerMitWahlschein) {
    this.anzahlWaehlerMitWahlschein = anzahlWaehlerMitWahlschein;
  }

  @Override
  public Long getAnzahlWaehlerMitWahlscheinInUrnenwahlAnzahlAusUrnenwahl() {
    return anzahlWaehlerMitWahlscheinInUrnenwahlAnzahlAusUrnenwahl;
  }

  @Override
  public void setAnzahlWaehlerMitWahlscheinInUrnenwahlAnzahlAusUrnenwahl(Long anzahlWaehlerMitWahlscheinInUrnenwahlAnzahlAusUrnenwahl) {
    this.anzahlWaehlerMitWahlscheinInUrnenwahlAnzahlAusUrnenwahl = anzahlWaehlerMitWahlscheinInUrnenwahlAnzahlAusUrnenwahl;
  }

  @Override
  public Long getAnzahlWaehlerMitWahlscheinInUrnenwahlAnzahlAusBriefwahl() {
    return anzahlWaehlerMitWahlscheinInUrnenwahlAnzahlAusBriefwahl;
  }

  @Override
  public void setAnzahlWaehlerMitWahlscheinInUrnenwahlAnzahlAusBriefwahl(Long anzahlWaehlerMitWahlscheinInUrnenwahlAnzahlAusBriefwahl) {
    this.anzahlWaehlerMitWahlscheinInUrnenwahlAnzahlAusBriefwahl = anzahlWaehlerMitWahlscheinInUrnenwahlAnzahlAusBriefwahl;
  }

  protected Long notNull(Long anzahl) {
    if (anzahl == null) {
      return 0L;
    }

    return anzahl;
  }
}
