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

import javax.annotation.Nullable;

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("Gebietsname")
  public final String gebietsname;

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

  @DocumentSimpleField("AnzahlStimmenGewichtet")
  public final Long anzahlStimmenGewichtetMitVoteValues;

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

  protected AbstractUnterverteilungZeile(String nummer, String gebietsname, @Nullable Long anzahlStimmen, @Nullable Long anzahlStimmenGewichtetMitVoteValues) {
    super();

    this.nummer = nummer;
    this.gebietsname = gebietsname;

    this.anzahlStimmen = anzahlStimmen;
    this.anzahlStimmenGewichtetMitVoteValues = anzahlStimmenGewichtetMitVoteValues;

    this.anzahlSitzeAusErsterZuteilung = null;

    this.restNachErsterZuteilung = "";
    this.restNachErsterZuteilungGanzzahl = anzahlStimmen != null && anzahlStimmen >= 0 ? "0" : ""; // ELECT-13661
    this.restNachErsterZuteilungBruch = "";

    this.anzahlSitzeAusNiemeyerVerteilung = null;
    this.gesamtzahlSitzeNachNiemeyerVerteilung = null;
  }

  protected AbstractUnterverteilungZeile(String nummer, String gebietsname, long anzahlStimmen, long anzahlStimmenGewichtetMitVoteValues, long anzahlSitzeAusErsterZuteilung,
      Fraction restNachErsterZuteilung, long anzahlSitzeAusNiemeyerVerteilung, long gesamtzahlSitzeNachNiemeyerVerteilung) {
    super();

    this.nummer = nummer;
    this.gebietsname = gebietsname;

    this.anzahlStimmen = anzahlStimmen;
    this.anzahlStimmenGewichtetMitVoteValues = anzahlStimmenGewichtetMitVoteValues;

    this.anzahlSitzeAusErsterZuteilung = zeroToNull(anzahlSitzeAusErsterZuteilung);

    this.restNachErsterZuteilung = restNachErsterZuteilung.formatGemischterBruch();
    this.restNachErsterZuteilungGanzzahl = anzahlStimmen > 0 ? restNachErsterZuteilung.formatGemischterBruchGanzzahl() : "0"; // ELECT-13661
    this.restNachErsterZuteilungBruch = restNachErsterZuteilung.formatGemischterBruchBruch();

    this.anzahlSitzeAusNiemeyerVerteilung = zeroToNull(anzahlSitzeAusNiemeyerVerteilung);
    this.gesamtzahlSitzeNachNiemeyerVerteilung = zeroToNull(gesamtzahlSitzeNachNiemeyerVerteilung);
  }

  @Nullable
  private Long zeroToNull(long value) {
    if (value == 0) {
      return null;
    }

    return value;
  }
}
