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

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

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 KommunalListenwahlListenkandidaturListenstimmenAnzahlGroesserGleichTheoretischesMinimumPlausi extends AbstractListenkandidaturListenstimmenAnzahlComparedToTheoretischeAnzahlPlausi
    implements
      StimmeingabePlausiAnzahlComparedToTheoretischesMinimum {

  public KommunalListenwahlListenkandidaturListenstimmenAnzahlGroesserGleichTheoretischesMinimumPlausi(Long anzahlNennungen,
      boolean stimmzettelNurEinzelnerWahlvorschlagUnveraendertManuellAuszuzaehlen, Stimmeingabe stimmzetteleingabeGruppeNurEinzelnerWahlvorschlagUnveraendert,
      StimmeingabePlausiKonfiguration stimmeingabePlausiKonfiguration, Messages messages) {
    super(anzahlNennungen, stimmzettelNurEinzelnerWahlvorschlagUnveraendertManuellAuszuzaehlen, stimmzetteleingabeGruppeNurEinzelnerWahlvorschlagUnveraendert,
        new StimmeingabeAnzahlComparedToStimmeingabeAnzahlenPlausiDefinition(StimmeingabeAnzahlReference.LISTENKANDIDATUR_LISTENSTIMMEN, StimmeingabeAnzahlComparedToOperator.GREATER_THAN_OR_EQUAL_TO,
            StimmeingabeAnzahlReference.GRUPPE_LISTENSTIMMEN_NUR_EINZELNER_WAHLVORSCHLAG_UNVERAENDERT),
        stimmeingabePlausiKonfiguration, messages);
  }

  @Override
  protected boolean isPlausibilisierenZulaessig(Stimmeingabe stimmeingabe) {
    return super.isPlausibilisierenZulaessig(stimmeingabe) && isStimmzettelNurEinzelnerWahlvorschlagUnveraendertManuellAuszuzaehlen();
  }

  @Override
  protected Long getComparedToValue() {
    return getAnzahlStimmenNurEinzelnerWahlvorschlagUnveraendert();
  }

  @Override
  protected List<Object> getStimmeingabefehlerBeschreibungParameters(Stimmeingabe stimmeingabe) {
    List<Object> result = new ArrayList<>(super.getStimmeingabefehlerBeschreibungParameters(stimmeingabe));
    result.add(getAnzahlNennungen());
    result.add(getAnzahlStimmzettelNurEinzelnerWahlvorschlagUnveraendert());

    return result;
  }
}
