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

import java.util.LinkedList;

import de.ivu.document.generator.template.annotations.DocumentQueue;
import de.ivu.document.generator.template.annotations.DocumentSimpleField;
import de.ivu.elect.business.gebietsbaum.entity.Wahldurchfuehrungsgebiet;
import de.ivu.elect.business.wahl.entity.WahlartErgebnisart;
import de.ivu.elect.dokumente.ergebnis.AbstractErgebnisTabellarischDocumentZeile;

public class ReferendumErgebnisGesamtergebnisTabellarischDocumentZeile extends AbstractErgebnisTabellarischDocumentZeile {

  private static final long serialVersionUID = 1L;

  @DocumentSimpleField("Gueltige-Stimmen-Insgesamt")
  public Long gueltigeStimmenInsgesamt;

  @DocumentSimpleField("Ungueltige-Stimmen")
  public Long ungueltigeStimmen;

  @DocumentSimpleField("Abgegebene-Stimmen-Insgesamt")
  public Long abgegebeneStimmenInsgesamt;

  @DocumentQueue(value = "Gueltige-Stimmen-der-Optionen", elementClass = Long.class)
  public LinkedList<Long> gueltigeStimmenDerOptionen;

  public ReferendumErgebnisGesamtergebnisTabellarischDocumentZeile(WahlartErgebnisart ergebnisart, Wahldurchfuehrungsgebiet wahldurchfuehrungsgebiet) {
    super(ergebnisart, wahldurchfuehrungsgebiet);

    this.gueltigeStimmenInsgesamt = 0L;
    this.ungueltigeStimmen = 0L;
    this.abgegebeneStimmenInsgesamt = 0L;

    this.gueltigeStimmenDerOptionen = new LinkedList<>();
  }

  @Override
  public ReferendumErgebnisGesamtergebnisTabellarischDocumentZeile copy() {
    return copyTo(new ReferendumErgebnisGesamtergebnisTabellarischDocumentZeile(ergebnisart, wahldurchfuehrungsgebiet));
  }

  protected <T extends ReferendumErgebnisGesamtergebnisTabellarischDocumentZeile> T copyTo(T target) {
    super.copyTo(target);

    target.gueltigeStimmenInsgesamt = gueltigeStimmenInsgesamt;
    target.ungueltigeStimmen = ungueltigeStimmen;
    target.abgegebeneStimmenInsgesamt = abgegebeneStimmenInsgesamt;

    target.gueltigeStimmenDerOptionen = new LinkedList<>(gueltigeStimmenDerOptionen);

    return target;
  }
}
