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

import javax.annotation.Nullable;

import de.ivu.document.generator.template.BaseDocument;
import de.ivu.document.generator.template.annotations.DocumentComplexField;
import de.ivu.elect.dokumente.DokumentFormatter;

public class StimmenMitVorperiodeAufGebiet extends BaseDocument {

  private static final long serialVersionUID = 1L;

  public static StimmenMitVorperiodeAufGebiet empty(DokumentFormatter formatter) {
    return new StimmenMitVorperiodeAufGebiet(null, null, null, null, null, null, null, null, formatter);
  }

  @DocumentComplexField("Erststimmen")
  public final AnzahlMitProzent erststimmen;

  @DocumentComplexField("ErststimmenVorperiode")
  public final AnzahlMitProzent erststimmenVorperiode;

  @DocumentComplexField("ErststimmenDifferenz")
  public final AnzahlMitProzent erststimmenDifferenz;

  @DocumentComplexField("Zweitstimmen")
  public final AnzahlMitProzent zweitstimmen;

  @DocumentComplexField("ZweitstimmenVorperiode")
  public final AnzahlMitProzent zweitstimmenVorperiode;

  @DocumentComplexField("ZweitstimmenDifferenz")
  public final AnzahlMitProzent zweitstimmenDifferenz;

  private final Long erststimmenBezug;
  private final Long zweitstimmenBezug;

  public StimmenMitVorperiodeAufGebiet(StimmenAktuellMitVorperiodeUndBezug stimmenDaten, DokumentFormatter formatter) {
    super();

    erststimmen = stimmenDaten.createAnzahlMitProzentErststimmen(formatter);
    erststimmenVorperiode = stimmenDaten.createAnzahlMitProzentErststimmenVorperiode(formatter);
    erststimmenDifferenz = stimmenDaten.createAnzahlMitProzentDifferenzErststimmen(formatter);
    erststimmenBezug = stimmenDaten.getErststimmenBezug();

    zweitstimmen = stimmenDaten.createAnzahlMitProzentZweitstimmen(formatter);
    zweitstimmenVorperiode = stimmenDaten.createAnzahlMitProzentZweitstimmenVorperiode(formatter);
    zweitstimmenDifferenz = stimmenDaten.createAnzahlMitProzentDifferenzZweitstimmen(formatter);
    zweitstimmenBezug = stimmenDaten.getZweitstimmenBezug();
  }

  public StimmenMitVorperiodeAufGebiet(StimmenAktuellMitVorperiode stimmen, StimmenAktuellMitVorperiode stimmenBezug, DokumentFormatter formatter) {
    this(new StimmenAktuellMitVorperiodeUndBezug(stimmen, stimmenBezug), formatter);
  }

  public StimmenMitVorperiodeAufGebiet(@Nullable Long anzahlErststimmen, @Nullable Long bezugErststimmen, @Nullable Long anzahlErststimmenVorperiode, @Nullable Long bezugErststimmenVorperiode,
      @Nullable Long anzahlZweitstimmen, @Nullable Long bezugZweitstimmen, @Nullable Long anzahlZweitstimmenVorperiode, @Nullable Long bezugZweitstimmenVorperiode, DokumentFormatter formatter) {

    this(new StimmenAktuellMitVorperiodeUndBezug(new StimmenAktuellMitVorperiode(anzahlErststimmen, anzahlErststimmenVorperiode, anzahlZweitstimmen, anzahlZweitstimmenVorperiode),
        new StimmenAktuellMitVorperiode(bezugErststimmen, bezugErststimmenVorperiode, bezugZweitstimmen, bezugZweitstimmenVorperiode)), formatter);
  }

  public Long getErststimmenBezug() {
    return erststimmenBezug;
  }

  public Long getZweitstimmenBezug() {
    return zweitstimmenBezug;
  }
}
