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

import java.util.Collection;

import de.ivu.elect.business.stimmeingabe.control.StimmeingabeKopfzahlKonfiguration;
import de.ivu.elect.business.stimmeingabe.entity.StimmeingabePlausiErgebniseingangsart;
import de.ivu.elect.business.stimmeingabe.entity.StimmeingabePlausiGebietsart;
import de.ivu.elect.business.stimmeingabe.entity.StimmeingabePlausiKonfiguration;
import de.ivu.elect.business.wahl.entity.Wahl;
import de.ivu.elect.business.wahl.entity.Wahlart;

public interface StimmeingabePlausiDefinitions {

  boolean isApplicable(Wahl wahl);

  Collection<StimmeingabePlausiGebietsart> collectGebietsartenRelevant();

  Collection<StimmeingabePlausiKonfiguration> collectStimmeingabePlausiKonfigurationDefiniert(StimmeingabePlausiDefinitionsContext context,
      StimmeingabeKopfzahlKonfiguration stimmeingabeKopfzahlKonfiguration, Wahl wahl);

  Collection<StimmeingabePlausiKonfiguration> collectStimmeingabePlausiKonfigurationDefiniert(StimmeingabePlausiDefinitionsContext context,
      StimmeingabeKopfzahlKonfiguration stimmeingabeKopfzahlKonfiguration, Wahl wahl, StimmeingabePlausiErgebniseingangsart ergebniseingangsart, StimmeingabePlausiGebietsart gebietsart);

  Collection<StimmeingabePlausiKonfiguration> collectStimmeingabePlausiKonfigurationRelevant(StimmeingabePlausiDefinitionsContext context,
      StimmeingabeKopfzahlKonfiguration stimmeingabeKopfzahlKonfiguration, Wahl wahl);

  Collection<StimmeingabePlausiKonfiguration> collectStimmeingabePlausiKonfigurationRelevant(StimmeingabePlausiDefinitionsContext context,
      StimmeingabeKopfzahlKonfiguration stimmeingabeKopfzahlKonfiguration, Wahl wahl, StimmeingabePlausiErgebniseingangsart ergebniseingangsart, StimmeingabePlausiGebietsart gebietsart);

  void fillInStimmeingabePlausiKonfigurationValuesLocalizated(Wahlart wahlart, StimmeingabePlausiKonfiguration stimmeingabePlausiKonfiguration);
}
