
package de.ivu.elect.business.stimmeingabe.control.plausi;

import de.ivu.elect.business.stimmeingabe.entity.Stimmeingabe;
import de.ivu.elect.business.stimmeingabe.entity.StimmeingabePlausiKonfiguration;
import de.ivu.elect.jee.faces.Messages;

public class NlStimmzettelEingenommenAnzahlenSummeKleinerGleichWahlberechtigteGesamtAnzahlPlausi extends StimmeingabeAnzahlKleinerGleichWahlberechtigteGesamtAnzahlPlausi {

  private final Stimmeingabe stimmeingabeWahlberechtigteGesamt;

  private final Stimmeingabe stimmzetteleingabeStimmzettelEingenommenGesamt;

  private final Stimmeingabe stimmzetteleingabeStimmzettelEingenommenGueltig;

  private final Stimmeingabe stimmzetteleingabeStimmzettelEingenommenBlanko;

  private final Stimmeingabe stimmzetteleingabeStimmzettelEingenommenUngueltig;

  public NlStimmzettelEingenommenAnzahlenSummeKleinerGleichWahlberechtigteGesamtAnzahlPlausi(Stimmeingabe stimmeingabeWahlberechtigteGesamt,
      Stimmeingabe stimmzetteleingabeStimmzettelEingenommenGesamt, Stimmeingabe stimmzetteleingabeStimmzettelEingenommenGueltig, Stimmeingabe stimmzetteleingabeStimmzettelEingenommenBlanko,
      Stimmeingabe stimmzetteleingabeStimmzettelEingenommenUngueltig, StimmeingabePlausiKonfiguration stimmeingabePlausiKonfiguration, Messages messages) {
    super(StimmeingabeAnzahlReference.SYSTEM_GRUPPE_STIMMZETTEL_GESAMT, stimmeingabeWahlberechtigteGesamt, stimmeingabePlausiKonfiguration, messages);

    this.stimmeingabeWahlberechtigteGesamt = stimmeingabeWahlberechtigteGesamt;

    this.stimmzetteleingabeStimmzettelEingenommenGesamt = stimmzetteleingabeStimmzettelEingenommenGesamt;

    this.stimmzetteleingabeStimmzettelEingenommenGueltig = stimmzetteleingabeStimmzettelEingenommenGueltig;
    this.stimmzetteleingabeStimmzettelEingenommenBlanko = stimmzetteleingabeStimmzettelEingenommenBlanko;
    this.stimmzetteleingabeStimmzettelEingenommenUngueltig = stimmzetteleingabeStimmzettelEingenommenUngueltig;
  }

  @Override
  protected boolean isPlausibilisierenZulaessig(Stimmeingabe stimmeingabe) {
    return super.isPlausibilisierenZulaessig(stimmeingabe) && /* ELECTVAPP-2143 */ stimmeingabeWahlberechtigteGesamt != null && stimmeingabeWahlberechtigteGesamt.hasAnzahlGroesserNull();
  }

  @Override // ELECTVAPP-980, ELECTVAPP-981
  protected Long getStimmeingabeAnzahl(Stimmeingabe stimmeingabe) {
    if (stimmzetteleingabeStimmzettelEingenommenGesamt != null) {
      return stimmzetteleingabeStimmzettelEingenommenGesamt.getAnzahl();
    }

    Long result = 0L;

    if (stimmzetteleingabeStimmzettelEingenommenGueltig != null) {
      result += stimmzetteleingabeStimmzettelEingenommenGueltig.getAnzahl();
    }

    if (stimmzetteleingabeStimmzettelEingenommenBlanko != null) {
      result += stimmzetteleingabeStimmzettelEingenommenBlanko.getAnzahl();
    }

    if (stimmzetteleingabeStimmzettelEingenommenUngueltig != null) {
      result += stimmzetteleingabeStimmzettelEingenommenUngueltig.getAnzahl();
    }

    return result;
  }
}
