
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 {

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

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

  private Gebiet gebiet;

  public AbstractStimmenCsvDTO() {
    super();
  }

  // ELECTDD-381 - WAS - SRW - Gesamtergebnisexport  - Überschriften fehlen
  public abstract Class< ? > getSubDTOClass();

  // ELECTDD-381 - WAS - SRW - Gesamtergebnisexport  - Überschriften fehlen
  public abstract int getAnzahlSubDTO();

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

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

  public Gebiet getGebiet() {
    return gebiet;
  }

  public String getGebietsart() {
    return gebietsart;
  }

  protected void setGebietsart(String gebietsart) {
    this.gebietsart = gebietsart;
  }

  public String getGebietsnummer() {
    return gebietsnummer;
  }

  protected void setGebietsnummer(String gebietsnummer) {
    this.gebietsnummer = gebietsnummer;
  }

  public Long getAnzahlWahlberechtigteOhneWahlschein() {
    return anzahlWahlberechtigteOhneWahlschein;
  }

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

  public Long getAnzahlWahlberechtigteMitWahlschein() {
    return anzahlWahlberechtigteMitWahlschein;
  }

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

  public Long getAnzahlWahlberechtigteNichtImWaehlerverzeichnis() {
    return anzahlWahlberechtigteNichtImWaehlerverzeichnis;
  }

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

  public Long getAnzahlWaehlerOhneWahlschein() {
    return anzahlWaehlerOhneWahlschein;
  }

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

  public Long getAnzahlWaehlerMitWahlschein() {
    return anzahlWaehlerMitWahlschein;
  }

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

  public Long getAnzahlWaehlerMitWahlscheinInUrnenwahlAnteilAusUrnenwahl() {
    return anzahlWaehlerMitWahlscheinInUrnenwahlAnteilAusUrnenwahl;
  }

  public void setAnzahlWaehlerMitWahlscheinInUrnenwahlAnteilAusUrnenwahl(Long anzahlWaehlerMitWahlscheinInUrnenwahlAnteilAusUrnenwahl) {
    this.anzahlWaehlerMitWahlscheinInUrnenwahlAnteilAusUrnenwahl = anzahlWaehlerMitWahlscheinInUrnenwahlAnteilAusUrnenwahl;
  }

  public Long getAnzahlWaehlerMitWahlscheinInUrnenwahlAnteilAusBriefwahl() {
    return anzahlWaehlerMitWahlscheinInUrnenwahlAnteilAusBriefwahl;
  }

  public void setAnzahlWaehlerMitWahlscheinInUrnenwahlAnteilAusBriefwahl(Long anzahlWaehlerMitWahlscheinInUrnenwahlAnteilAusBriefwahl) {
    this.anzahlWaehlerMitWahlscheinInUrnenwahlAnteilAusBriefwahl = anzahlWaehlerMitWahlscheinInUrnenwahlAnteilAusBriefwahl;
  }

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

    return anzahl;
  }
}
