
package de.ivu.elect.dokumente.ergebnis.p22;

import de.ivu.document.generator.template.BaseDocument;
import de.ivu.document.generator.template.annotations.DocumentSimpleField;
import de.ivu.elect.dokumente.ergebnis.adapter.Fraction;

public abstract class AbstractUnterverteilungZeile extends BaseDocument {

  private static final long serialVersionUID = 1L;

  @DocumentSimpleField("Nummer")
  public final String nummer;

  @DocumentSimpleField("AnzahlStimmen")
  public final Long anzahlStimmen;

  @DocumentSimpleField("AnzahlSitzeAusErsterZuteilung")
  public final Long anzahlSitzeAusErsterZuteilung;

  @DocumentSimpleField("RestNachErsterZuteilung")
  public final String restNachErsterZuteilung;

  @DocumentSimpleField("RestNachErsterZuteilungGanzzahl")
  public final String restNachErsterZuteilungGanzzahl; // ELECT-11986

  @DocumentSimpleField("RestNachErsterZuteilungBruch")
  public final String restNachErsterZuteilungBruch; // ELECT-11986

  @DocumentSimpleField("AnzahlSitzeAusNiemeyerVerteilung")
  public final Long anzahlSitzeAusNiemeyerVerteilung;

  @DocumentSimpleField("GesamtzahlSitzeNachNieymerVerteilung")
  public final Long gesamtzahlSitzeNachNiemeyerVerteilung;

  public AbstractUnterverteilungZeile(String nummer, Long anzahlStimmen) {
    super();

    this.nummer = nummer;

    this.anzahlStimmen = anzahlStimmen;

    this.anzahlSitzeAusErsterZuteilung = null;

    this.restNachErsterZuteilung = "";
    this.restNachErsterZuteilungGanzzahl = "";
    this.restNachErsterZuteilungBruch = "";

    this.anzahlSitzeAusNiemeyerVerteilung = null;

    this.gesamtzahlSitzeNachNiemeyerVerteilung = null;
  }

  public AbstractUnterverteilungZeile(String nummer, Long anzahlStimmen, Long anzahlSitzeAusErsterZuteilung, Fraction restNachErsterZuteilung, Long anzahlSitzeAusNiemeyerVerteilung,
      Long gesamtzahlSitzeNachNiemeyerVerteilung) {
    super();

    this.nummer = nummer;

    this.anzahlStimmen = anzahlStimmen;

    this.anzahlSitzeAusErsterZuteilung = getNonZero(anzahlSitzeAusErsterZuteilung);

    this.restNachErsterZuteilung = restNachErsterZuteilung.formatGemischterBruch();
    this.restNachErsterZuteilungGanzzahl = restNachErsterZuteilung.formatGemischterBruchGanzzahl();
    this.restNachErsterZuteilungBruch = restNachErsterZuteilung.formatGemischterBruchBruch();

    this.anzahlSitzeAusNiemeyerVerteilung = getNonZero(anzahlSitzeAusNiemeyerVerteilung);

    this.gesamtzahlSitzeNachNiemeyerVerteilung = getNonZero(gesamtzahlSitzeNachNiemeyerVerteilung);
  }

  private Long getNonZero(Long val) {
    if (val == 0) {
      return null;
    }

    return val;
  }
}
