
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.document.generator.template.annotations.DocumentSimpleField;
import de.ivu.elect.business.gruppe.entity.Gruppe;
import de.ivu.elect.dokumente.CoreElectContext;
import de.ivu.elect.dokumente.wahlvorschlag.GruppeDokument;
import de.ivu.elect.was.exchange.internet.velocity.PolitischeGruppeProzentGewinnVerlust;
import de.ivu.elect.was.exchange.internet.velocity.SystemGruppeProzentGewinnVerlust;

public class GruppenErgebnisAufGebiet extends BaseDocument {

  private static final long serialVersionUID = 1L;

  @DocumentComplexField("Gruppe")
  public final GruppeDokument gruppe;

  @DocumentSimpleField("Direktstimmen-Auf-Gebiet-Erfassbar")
  public final boolean direktstimmenAufGebietErfassbar;

  @DocumentComplexField("Direktstimmen")
  public final GruppenStimmen direktstimmen;

  /**
   * @deprecated
   * @see GruppenErgebnisAufGebiet#direktstimmen
   */
  @Deprecated
  @DocumentComplexField("Erststimmen")
  public final GruppenStimmen erststimmen;

  @DocumentSimpleField("Listenstimmen-Auf-Gebiet-Erfassbar")
  public final boolean listenstimmenAufGebietErfassbar;

  @DocumentComplexField("Listenstimmen")
  public final GruppenStimmen listenstimmen;

  /**
   * @deprecated
   * @see GruppenErgebnisAufGebiet#listenstimmen
   */
  @Deprecated
  @DocumentComplexField("Zweitstimmen")
  public final GruppenStimmen zweitstimmen;

  @DocumentComplexField("Gesamtstimmen")
  public final GruppenStimmen gesamtstimmen;

  public GruppenErgebnisAufGebiet(CoreElectContext coreElectContext, GruppeDokument gruppe, boolean direktstimmenAufGebietErfassbar, @Nullable PolitischeGruppeProzentGewinnVerlust direktstimmen,
      boolean listenstimmenAufGebietErfassbar, @Nullable PolitischeGruppeProzentGewinnVerlust listenstimmen, @Nullable PolitischeGruppeProzentGewinnVerlust gesamtstimmen) {
    super();

    this.gruppe = gruppe;

    this.direktstimmenAufGebietErfassbar = direktstimmenAufGebietErfassbar;
    this.direktstimmen = new GruppenStimmen(coreElectContext, direktstimmen);
    this.erststimmen = this.direktstimmen;

    this.listenstimmenAufGebietErfassbar = listenstimmenAufGebietErfassbar;
    this.listenstimmen = new GruppenStimmen(coreElectContext, listenstimmen);
    this.zweitstimmen = this.listenstimmen;

    this.gesamtstimmen = new GruppenStimmen(coreElectContext, gesamtstimmen);
  }

  public GruppenErgebnisAufGebiet(CoreElectContext coreElectContext, Gruppe gruppe, boolean direktstimmenAufGebietErfassbar, SystemGruppeProzentGewinnVerlust direktstimmen,
      boolean listenstimmenAufGebietErfassbar, SystemGruppeProzentGewinnVerlust listenstimmen, SystemGruppeProzentGewinnVerlust gesamtstimmen) {
    super();

    this.gruppe = new GruppeDokument(gruppe);

    this.direktstimmenAufGebietErfassbar = direktstimmenAufGebietErfassbar;
    this.direktstimmen = new GruppenStimmen(coreElectContext, direktstimmen);
    this.erststimmen = this.direktstimmen;

    this.listenstimmenAufGebietErfassbar = listenstimmenAufGebietErfassbar;
    this.listenstimmen = new GruppenStimmen(coreElectContext, listenstimmen);
    this.zweitstimmen = this.listenstimmen;

    this.gesamtstimmen = new GruppenStimmen(coreElectContext, gesamtstimmen);
  }
}
