
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 WaehlerOhneWahlscheinBerechnetAnzahlKleinerWahlberechtigteOhneWahlscheinAnzahlAnteilPlausi extends AbstractStimmeingabeAnzahlComparedToStimmeingabeAnzahlenSummeAnteilPlausi
    implements
      StimmeingabePlausiAnzahlBerechnet,
      StimmeingabePlausiAnzahlComparedToWahlbeteiligung {

  private final Stimmeingabe stimmeingabeWaehlerGesamt;

  private final Stimmeingabe stimmeingabeWaehlerMitWahlschein;

  public WaehlerOhneWahlscheinBerechnetAnzahlKleinerWahlberechtigteOhneWahlscheinAnzahlAnteilPlausi(Stimmeingabe stimmeingabeWaehlerGesamt, Stimmeingabe stimmeingabeWaehlerMitWahlschein,
      Stimmeingabe stimmeingabeWahlberechtigteOhneWahlschein, StimmeingabePlausiKonfiguration stimmeingabePlausiKonfiguration, Messages messages) {
    super(
        new StimmeingabeAnzahlComparedToStimmeingabeAnzahlenPlausiDefinition(StimmeingabeAnzahlReference.SYSTEM_GRUPPE_WAEHLER_OHNE_WAHLSCHEIN_BERECHNET,
            StimmeingabeAnzahlComparedToOperator.LESS_THAN, StimmeingabeAnzahlReference.SYSTEM_GRUPPE_WAHLBERECHTIGTE_OHNE_WAHLSCHEIN),
        stimmeingabeWahlberechtigteOhneWahlschein, stimmeingabePlausiKonfiguration, messages);

    this.stimmeingabeWaehlerGesamt = stimmeingabeWaehlerGesamt;
    this.stimmeingabeWaehlerMitWahlschein = stimmeingabeWaehlerMitWahlschein;
  }

  @Override
  protected Long getStimmeingabeAnzahl(Stimmeingabe stimmeingabe) {
    // Wähler am Ort = Wähler gesamt - Wähler mit Wahlschein = Wähler ohne Wahlschein berechnet
    return getAnzahlWaehlerGesamt() - getAnzahlWaeherMitWahlschein();
  }

  private Long getAnzahlWaehlerGesamt() {
    return stimmeingabeWaehlerGesamt.getAnzahl();
  }

  private Long getAnzahlWaeherMitWahlschein() {
    return stimmeingabeWaehlerMitWahlschein.getAnzahl();
  }
}
