
package de.ivu.elect.wus.exchange.kandidatur.landtagswahl;

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

import de.ivu.jsefa.CsvHeader;

@CsvDataType
public class BayernLandtagswahlStimmkreisStimmzettelCsvDTO {

  @CsvField(pos = 1)
  @CsvHeader("Wahlkreisvorschlag")
  private String wahlkreisvorschlag;

  @CsvField(pos = 2)
  @CsvHeader("Partei")
  private String gruppeName;

  @CsvField(pos = 3)
  @CsvHeader("Kurz")
  private String gruppeKurzname;

  @CsvField(pos = 4)
  @CsvHeader("Nummer")
  private String gruppeImGebietPositionListenkandidaturPositionSchluessel;

  @CsvField(pos = 5)
  @CsvHeader("Akad")
  private String personTitel;

  @CsvField(pos = 6)
  @CsvHeader("Nachname")
  private String personFamilienname;

  @CsvField(pos = 7)
  @CsvHeader("Vorname")
  private String personVorname;

  @CsvField(pos = 8)
  @CsvHeader("Beruf")
  private String personBeruf;

  @CsvField(pos = 9)
  @CsvHeader("Jahr")
  private String personGeburtsjahr;

  @CsvField(pos = 10)
  @CsvHeader("Anschrift")
  private String anschriftStrasseHausnummer;

  @CsvField(pos = 11)
  @CsvHeader("PLZ")
  private String anschriftPlz;

  @CsvField(pos = 12)
  @CsvHeader("Ort")
  private String anschriftOrt;

  @CsvField(pos = 13)
  @CsvHeader("Bezirk Nummer (Tritt an als Direktkandidat)")
  private String stimmkreisNummerDirektkandidat;

  @CsvField(pos = 14)
  @CsvHeader("Bezirk Name (Tritt an als Direktkandidat)")
  private String stimmkreisNameDirektkandidat;

  public String getWahlkreisvorschlag() {
    return wahlkreisvorschlag;
  }

  public void setWahlkreisvorschlag(String wahlkreisvorschlag) {
    this.wahlkreisvorschlag = wahlkreisvorschlag;
  }

  public String getGruppeName() {
    return gruppeName;
  }

  public void setGruppeName(String gruppeName) {
    this.gruppeName = gruppeName;
  }

  public String getGruppeKurzname() {
    return gruppeKurzname;
  }

  public void setGruppeKurzname(String gruppeKurzname) {
    this.gruppeKurzname = gruppeKurzname;
  }

  public String getGruppeSchluessel() {
    return String.valueOf(getGruppeImGebietPosition());
  }

  public Long getGruppeImGebietPosition() {
    return splitGruppeImGebietPositionListenkandidaturPositionSchluessel()[0];
  }

  public Long getListenkandidaturPosition() {
    return splitGruppeImGebietPositionListenkandidaturPositionSchluessel()[1];
  }

  public String getGruppeImGebietPositionListenkandidaturPositionSchluessel() {
    return gruppeImGebietPositionListenkandidaturPositionSchluessel;
  }

  public void setGruppeImGebietPositionListenkandidaturPositionSchluessel(
      String gruppeImGebietPositionListenkandidaturPositionSchluessel) {
    this.gruppeImGebietPositionListenkandidaturPositionSchluessel = gruppeImGebietPositionListenkandidaturPositionSchluessel;
  }

  public String getPersonTitel() {
    return personTitel;
  }

  public void setPersonTitel(String personTitel) {
    this.personTitel = personTitel;
  }

  public String getPersonFamilienname() {
    return personFamilienname;
  }

  public void setPersonFamilienname(String personFamilienname) {
    this.personFamilienname = personFamilienname;
  }

  public String getPersonVorname() {
    return personVorname;
  }

  public void setPersonVorname(String personVorname) {
    this.personVorname = personVorname;
  }

  public String getPersonBeruf() {
    return personBeruf;
  }

  public void setPersonBeruf(String personBeruf) {
    this.personBeruf = personBeruf;
  }

  public String getPersonGeburtsjahr() {
    return personGeburtsjahr;
  }

  public void setPersonGeburtsjahr(String personGeburtsjahr) {
    this.personGeburtsjahr = personGeburtsjahr;
  }

  public String getAnschriftStrasseHausnummer() {
    return anschriftStrasseHausnummer;
  }

  public void setAnschriftStrasseHausnummer(String anschriftStrasseHausnummer) {
    this.anschriftStrasseHausnummer = anschriftStrasseHausnummer;
  }

  public String getAnschriftPlz() {
    return anschriftPlz;
  }

  public void setAnschriftPlz(String anschriftPlz) {
    this.anschriftPlz = anschriftPlz;
  }

  public String getAnschriftOrt() {
    return anschriftOrt;
  }

  public void setAnschriftOrt(String anschriftOrt) {
    this.anschriftOrt = anschriftOrt;
  }

  public String getStimmkreisNummerDirektkandidat() {
    return stimmkreisNummerDirektkandidat;
  }

  public void setStimmkreisNummerDirektkandidat(String stimmkreisNummerDirektkandidat) {
    this.stimmkreisNummerDirektkandidat = stimmkreisNummerDirektkandidat;
  }

  public String getStimmkreisNameDirektkandidat() {
    return stimmkreisNameDirektkandidat;
  }

  public void setStimmkreisNameDirektkandidat(String stimmkreisNameDirektkandidat) {
    this.stimmkreisNameDirektkandidat = stimmkreisNameDirektkandidat;
  }

  private Long[] splitGruppeImGebietPositionListenkandidaturPositionSchluessel() {
    String positionenSchluessel = getGruppeImGebietPositionListenkandidaturPositionSchluessel();

    int maxListenkandidaturPosition = 99;
    int maxListenkandidaturPositionDigitsCount = String.valueOf(maxListenkandidaturPosition).length();

    try {
      int splitIndex = positionenSchluessel.length() - maxListenkandidaturPositionDigitsCount;

      Long gruppeImGebietPosition = Long.parseLong(positionenSchluessel.substring(0, splitIndex));
      Long listenkandidaturPosition = Long.parseLong(positionenSchluessel.substring(splitIndex));

      return new Long[] {gruppeImGebietPosition, listenkandidaturPosition};
    } catch (Exception ex) {
      throw new IllegalArgumentException("Feld 'Nummer' [nummer = " + positionenSchluessel
          + "] kann nicht in Positionen fuer GruppeImGebiet und Listenkandidatur zerlegt werden", ex);
    }
  }
}
