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

import static java.util.Arrays.asList;

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

/**
 * NOTE ELECTDD-369, 'Gültige Stimmen (D) + Ungültige Stimmen (C) = Wähler/Abstimmende Personen insgesamt (B)'.
 */
// Cf. WaehlerGesamtAnzahlGleichGueltigeStimmenAnzahlPlusUngueltigeStimmenAnzahlPlausi!
// Cf. MucReferendumVorlageStimmenGesamtZwischensummeGleichVorlageStimmenGueltigeZwischensummePlusVorlageStimmenUngueltigeZwischensummePlausi!
public class ReferendumWaehlerGesamtAnzahlGleichVorlageStimmenGueltigeZwischensummePlusVorlageStimmenUngueltigeZwischensummePlausi
    extends
      AbstractStimmeingabeAnzahlComparedToStimmeingabeAnzahlenSummePlausi {

  public ReferendumWaehlerGesamtAnzahlGleichVorlageStimmenGueltigeZwischensummePlusVorlageStimmenUngueltigeZwischensummePlausi(Stimmeingabe zwischensummeEingabeReferendumVorlageGueltige,
      Stimmeingabe zwischensummeEingabeReferendumVorlageUngueltige, StimmeingabePlausiKonfiguration stimmeingabePlausiKonfiguration, Messages messages) {
    super(
        new StimmeingabeAnzahlComparedToStimmeingabeAnzahlenPlausiDefinition(StimmeingabeAnzahlReference.SYSTEM_GRUPPE_WAEHLER_GESAMT, StimmeingabeAnzahlComparedToOperator.EQUAL_TO,
            StimmeingabeAnzahlReference.REFERENDUM_VORLAGE_REFERENDUM_STIMMEN_ZWISCHENSUMME_GUELTIGE, StimmeingabeAnzahlReference.REFERENDUM_VORLAGE_REFERENDUM_STIMMEN_ZWISCHENSUMME_UNGUELTIGE),
        asList(zwischensummeEingabeReferendumVorlageGueltige, zwischensummeEingabeReferendumVorlageUngueltige), stimmeingabePlausiKonfiguration, messages);
  }

  @Override
  protected StimmeingabePlausiFiktiveWerteFehlerBeheber getFiktiveWerteFehlerBeheber() {
    // Alternative: EinenWertErgaenzenderSummenFehlerBeheber
    return new SummenRueckwaertsKorrigierenderFehlerBeheber(getComparedToStimmeingaben());
  }
}
