
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;

public class WaehlerGesamtAnzahlGroesserGleichGueltigeStimmenAnzahlPlusUngueltigeStimmenAnzahlPlausi extends AbstractStimmeingabeAnzahlComparedToStimmeingabeAnzahlenSummePlausi {

  public WaehlerGesamtAnzahlGroesserGleichGueltigeStimmenAnzahlPlusUngueltigeStimmenAnzahlPlausi(Stimmeingabe stimmeingabeGueltigeStimmen, Stimmeingabe stimmeingabeUngueltigeStimmen,
      StimmeingabePlausiKonfiguration stimmeingabePlausiKonfiguration, Messages messages) {
    super(
        new StimmeingabeAnzahlComparedToStimmeingabeAnzahlenPlausiDefinition(StimmeingabeAnzahlReference.SYSTEM_GRUPPE_WAEHLER_GESAMT, StimmeingabeAnzahlComparedToOperator.GREATER_THAN_OR_EQUAL_TO,
            findStimmeingabeGueltigeStimmenReference(stimmeingabePlausiKonfiguration), findStimmeingabeUngueltigeStimmenReference(stimmeingabePlausiKonfiguration)),
        asList(stimmeingabeGueltigeStimmen, stimmeingabeUngueltigeStimmen), stimmeingabePlausiKonfiguration, messages);
  }

  private static StimmeingabeAnzahlReference findStimmeingabeUngueltigeStimmenReference(StimmeingabePlausiKonfiguration stimmeingabePlausiKonfiguration) {
    return StimmeingabePlausiNachStimmenart.findStimmeingabeUngueltigeStimmenReference(stimmeingabePlausiKonfiguration.getTyp());
  }

  private static StimmeingabeAnzahlReference findStimmeingabeGueltigeStimmenReference(StimmeingabePlausiKonfiguration stimmeingabePlausiKonfiguration) {
    return StimmeingabePlausiNachStimmenart.findStimmeingabeGueltigeStimmenReference(stimmeingabePlausiKonfiguration.getTyp());
  }

  @Override
  protected StimmeingabePlausiFiktiveWerteFehlerBeheber getFiktiveWerteFehlerBeheber() {
    return new EinenWertErgaenzenderSummenFehlerBeheber(getComparedToStimmeingaben());
  }
}
