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

import java.util.Collection;

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

// Cf. ReferendumVorlageStimmenGueltigeZwischensummeGleichOptionStimmenAnzahlenSummePlausi!
// Cf. DdKommunalwahlGueltigeListenstimmenAnzahlGleichListenkandidaturListenstimmenAnzahlenSummePlausi!
public class GueltigeStimmenAnzahlGleichGruppeStimmenAnzahlenSummePlausi extends AbstractStimmeingabeAnzahlComparedToStimmeingabeAnzahlenSummePlausi {

  public GueltigeStimmenAnzahlGleichGruppeStimmenAnzahlenSummePlausi(Collection<Stimmeingabe> stimmeingabenGruppeStimmen, StimmeingabePlausiKonfiguration stimmeingabePlausiKonfiguration,
      Messages messages) {
    super(new StimmeingabeAnzahlComparedToStimmeingabeAnzahlenPlausiDefinition(findStimmeingabeGueltigeStimmenReference(stimmeingabePlausiKonfiguration), StimmeingabeAnzahlComparedToOperator.EQUAL_TO,
        findStimmeingabeGruppeStimmenReference(stimmeingabePlausiKonfiguration)), stimmeingabenGruppeStimmen, stimmeingabePlausiKonfiguration, messages);
  }

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

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

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