
package de.ivu.elect.presentation.ergebnis.dokumente.gesamtergebnis;

import static de.ivu.elect.was.exchange.ergebnis.dokumente.util.WahlbuchNumberUtil.addLongNull;

/**
 * Fasst vier Stimmenzahlen (Erst- und Zweitstimmen, jeweils aktuell und Vorperiode) zusammen.
 */
public class StimmenAktuellMitVorperiode {

  public static StimmenAktuellMitVorperiode NULL = new StimmenAktuellMitVorperiode(null, null, null, null);

  private Long erststimmen;
  private Long erststimmenVorperiode;
  private Long zweitstimmen;
  private Long zweitstimmenVorperiode;

  public StimmenAktuellMitVorperiode() {
  }

  public StimmenAktuellMitVorperiode(Long erststimmen, Long erststimmenVorperiode, Long zweitstimmen,
      Long zweitstimmenVorperiode) {
    this.erststimmen = erststimmen;
    this.erststimmenVorperiode = erststimmenVorperiode;
    this.zweitstimmen = zweitstimmen;
    this.zweitstimmenVorperiode = zweitstimmenVorperiode;
  }

  public Long getErststimmen() {
    return erststimmen;
  }

  public Long getErststimmenVorperiode() {
    return erststimmenVorperiode;
  }

  public Long getZweitstimmen() {
    return zweitstimmen;
  }

  public Long getZweitstimmenVorperiode() {
    return zweitstimmenVorperiode;
  }

  public StimmenAktuellMitVorperiode plus(StimmenAktuellMitVorperiode other) {
    return new StimmenAktuellMitVorperiode(
        addLongNull(this.getErststimmen(), other.getErststimmen()),
        addLongNull(this.getErststimmenVorperiode(), other.getErststimmenVorperiode()),
        addLongNull(this.getZweitstimmen(), other.getZweitstimmen()),
        addLongNull(this.getZweitstimmenVorperiode(), other.getZweitstimmenVorperiode()));
  }

  public StimmenAktuellMitVorperiodeUndBezug ohneBezug() {
    return new StimmenAktuellMitVorperiodeUndBezug(this, StimmenAktuellMitVorperiode.NULL);
  }

  public StimmenAktuellMitVorperiodeUndBezug mitBezug(StimmenAktuellMitVorperiode other) {
    return new StimmenAktuellMitVorperiodeUndBezug(this, other);
  }

  public void addErststimmen(Long value) {
    erststimmen = addLongNull(erststimmen, value);
  }

  public void addErststimmenVorperiode(Long value) {
    erststimmenVorperiode = addLongNull(erststimmenVorperiode, value);
  }

  public void addZweitstimmen(Long value) {
    zweitstimmen = addLongNull(zweitstimmen, value);
  }

  public void addZweitstimmenVorperiode(Long value) {
    zweitstimmenVorperiode = addLongNull(zweitstimmenVorperiode, value);
  }

}
