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

import java.util.ArrayList;
import java.util.List;

import de.ivu.document.generator.template.BaseDocument;
import de.ivu.document.generator.template.annotations.DocumentRepeat;
import de.ivu.document.generator.template.annotations.DocumentSimpleField;
import de.ivu.elect.business.niederschrift.boundary.NiederschriftFormatter;
import de.ivu.elect.business.niederschrift.entity.Niederschrift;
import de.ivu.elect.business.niederschrift.entity.NiederschriftArt;
import de.ivu.elect.dokumente.BaseElectContext;

public class NiederschriftUebersichtDocument extends BaseDocument {

  private static final long serialVersionUID = 1L;

  @DocumentSimpleField("art")
  public final String art;

  @DocumentSimpleField("IstNiederschrift")
  public final boolean isNiederschrift;

  @DocumentSimpleField("IstNiederschriftMitKorrektur")
  public final boolean isNiederschriftMitKorrektur;

  @DocumentSimpleField("IstSchnellmeldung")
  public final boolean isSchnellmeldung;

  @DocumentSimpleField("IstSchnellmeldungMitKorrektur")
  public final boolean isSchnellmeldungMitKorrektur;

  @DocumentSimpleField("IstVerhandlungstasche")
  public final boolean isVerhandlungstasche;

  @DocumentSimpleField("IstVerhandlungstascheMitKorrektur")
  public final boolean isVerhandlungstascheMitKorrektur;

  @DocumentSimpleField("AnzahlRechnerischKorrigierterNiederschriften")
  public final long anzahlRechnerischKorrigierterNiederschriften;

  @DocumentSimpleField("AnzahlRechnerischKorrigierterNiederschriftenOhneNachzaehlung")
  public final long anzahlRechnerischKorrigierterNiederschriftenOhneNachzaehlung;

  @DocumentSimpleField("AnzahlNachgezaehlterNiederschriften")
  public final long anzahlNachgezaehlterNiederschriften;

  @DocumentRepeat(value = "Niederschriften", elementClass = NiederschriftDocument.class, itemName = "niederschrift")
  public final List<NiederschriftDocument> niederschriften;

  public NiederschriftUebersichtDocument(BaseElectContext baseElectContext, NiederschriftFormatter niederschriftFormatter, NiederschriftArt niederschriftArt,
      List<Niederschrift> niederschriftenEntities) {
    super();

    this.art = baseElectContext.getMessage(niederschriftArt);

    this.niederschriften = new ArrayList<>();

    int anzahlKorrekturenNachzaehlung = 0;
    int anzahlKorrekturenRechnerisch = 0;
    int anzahlKorrekturenRechnerischOhneNachzaehlung = 0;

    for (Niederschrift niederschrift : niederschriftenEntities) {
      if (niederschriftArt.equals(niederschrift.getNiederschriftArt())) {
        NiederschriftDocument niederschriftDocument = new NiederschriftDocument(baseElectContext, niederschriftFormatter, niederschrift);

        this.niederschriften.add(niederschriftDocument);

        if (niederschriftDocument.isNachzaehlungVorhanden) {
          anzahlKorrekturenNachzaehlung++;
        }

        if (niederschriftDocument.isRechnerischeKorrekturVorhanden) {
          anzahlKorrekturenRechnerisch++;
        }

        if (niederschriftDocument.isRechnerischeKorrekturVorhanden && !niederschriftDocument.isNachzaehlungVorhanden) {
          anzahlKorrekturenRechnerischOhneNachzaehlung++;
        }
      }
    }

    this.anzahlRechnerischKorrigierterNiederschriften = anzahlKorrekturenRechnerisch;
    this.anzahlRechnerischKorrigierterNiederschriftenOhneNachzaehlung = anzahlKorrekturenRechnerischOhneNachzaehlung;
    this.anzahlNachgezaehlterNiederschriften = anzahlKorrekturenNachzaehlung;

    long anzahlKorrekturen = this.anzahlRechnerischKorrigierterNiederschriften + this.anzahlRechnerischKorrigierterNiederschriftenOhneNachzaehlung + this.anzahlNachgezaehlterNiederschriften;

    this.isNiederschrift = niederschriftArt.isNiederschrift();
    this.isNiederschriftMitKorrektur = this.isNiederschrift && anzahlKorrekturen > 0;

    this.isSchnellmeldung = niederschriftArt.isSchnellmneldung();
    this.isSchnellmeldungMitKorrektur = this.isSchnellmeldung && anzahlKorrekturen > 0;

    this.isVerhandlungstasche = niederschriftArt.isVerhandlungstasche();
    this.isVerhandlungstascheMitKorrektur = this.isVerhandlungstasche && anzahlKorrekturen > 0;
  }
}
