
package de.ivu.elect.business.gebietsbaum.control;

import javax.annotation.Nullable;

import de.ivu.elect.business.gebietsbaum.entity.Wahldurchfuehrungsgebiet;

public class AWerte {

  private Long anzahlWahlberechtigteOhneWahlschein = null;

  private Long anzahlWahlberechtigteMitWahlschein = null;

  private Long anzahlWahlberechtigteNichtImWaehlerverzeichnis = null;

  public AWerte() {
    super();
  }

  public void add(AWerte aWerte) {
    addAnzahlWahlberechtigteOhneWahlschein(aWerte.getAnzahlWahlberechtigteOhneWahlschein());
    addAnzahlWahlberechtigteMitWahlschein(aWerte.getAnzahlWahlberechtigteMitWahlschein());
    addAnzahlWahlberechtigteNichtImWaehlerverzeichnis(aWerte.getAnzahlWahlberechtigteNichtImWaehlerverzeichnis());
  }

  public void add(Wahldurchfuehrungsgebiet wahldurchfuehrungsgebiet) {
    addAnzahlWahlberechtigteOhneWahlschein(wahldurchfuehrungsgebiet.getAnzahlWahlberechtigteOhneWahlschein());
    addAnzahlWahlberechtigteMitWahlschein(wahldurchfuehrungsgebiet.getAnzahlWahlberechtigteMitWahlschein());
    addAnzahlWahlberechtigteNichtImWaehlerverzeichnis(wahldurchfuehrungsgebiet.getAnzahlWahlberechtigteNichtImWaehlerverzeichnis());
  }

  public void schreibeWerte(Wahldurchfuehrungsgebiet wahldurchfuehrungsgebiet) {
    wahldurchfuehrungsgebiet.setAnzahlWahlberechtigteOhneWahlschein(getAnzahlWahlberechtigteOhneWahlschein());
    wahldurchfuehrungsgebiet.setAnzahlWahlberechtigteMitWahlschein(getAnzahlWahlberechtigteMitWahlschein());
    wahldurchfuehrungsgebiet.setAnzahlWahlberechtigteNichtImWaehlerverzeichnis(getAnzahlWahlberechtigteNichtImWaehlerverzeichnis());
  }

  public void addAnzahlWahlberechtigteOhneWahlschein(@Nullable Long anzahl) {
    if (this.anzahlWahlberechtigteOhneWahlschein == null) {
      this.anzahlWahlberechtigteOhneWahlschein = anzahl;
    } else {
      if (anzahl != null) {
        this.anzahlWahlberechtigteOhneWahlschein += anzahl;
      }
    }
  }

  public void addAnzahlWahlberechtigteMitWahlschein(@Nullable Long anzahl) {
    if (this.anzahlWahlberechtigteMitWahlschein == null) {
      this.anzahlWahlberechtigteMitWahlschein = anzahl;
    } else {
      if (anzahl != null) {
        this.anzahlWahlberechtigteMitWahlschein += anzahl;
      }
    }
  }

  public void addAnzahlWahlberechtigteNichtImWaehlerverzeichnis(@Nullable Long anzahl) {
    if (this.anzahlWahlberechtigteNichtImWaehlerverzeichnis == null) {
      this.anzahlWahlberechtigteNichtImWaehlerverzeichnis = anzahl;
    } else {
      if (anzahl != null) {
        this.anzahlWahlberechtigteNichtImWaehlerverzeichnis += anzahl;
      }
    }
  }

  @Nullable
  public Long getAnzahlWahlberechtigteGesamtA1A2A3() {
    Long result = getAnzahlWahlberechtigteOhneWahlschein();
    if (result == null) {
      result = getAnzahlWahlberechtigteMitWahlschein();
    } else {
      if (getAnzahlWahlberechtigteMitWahlschein() != null) {
        result += getAnzahlWahlberechtigteMitWahlschein();
      }
    }
    if (result == null) {
      result = getAnzahlWahlberechtigteNichtImWaehlerverzeichnis();
    } else {
      if (getAnzahlWahlberechtigteNichtImWaehlerverzeichnis() != null) {
        result += getAnzahlWahlberechtigteNichtImWaehlerverzeichnis();
      }
    }

    return result;
  }

  public long getAnzahlWahlberechtigteGesamtA1A2A3NotNull() {
    return getAnzahlWahlberechtigteOhneWahlscheinNotNull() + getAnzahlWahlberechtigteMitWahlscheinNotNull() +
        getAnzahlWahlberechtigteNichtImWaehlerverzeichnisNotNull();
  }

  public long getAnzahlWahlberechtigteOhneWahlscheinNotNull() {
    return notNull(getAnzahlWahlberechtigteOhneWahlschein());
  }

  public long getAnzahlWahlberechtigteMitWahlscheinNotNull() {
    return notNull(getAnzahlWahlberechtigteMitWahlschein());
  }

  public long getAnzahlWahlberechtigteNichtImWaehlerverzeichnisNotNull() {
    return notNull(getAnzahlWahlberechtigteNichtImWaehlerverzeichnis());
  }

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

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

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

  private static long notNull(Long value) {
    if (value != null) {
      return value;
    }
    return 0L;
  }
}
