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

import java.util.Collection;

import javax.annotation.Nullable;

import de.ivu.elect.business.gruppeimgebiet.entity.GruppeImGebiet;
import de.ivu.elect.business.stimmeingabe.entity.Stimmeingabe;
import de.ivu.elect.business.stimmzettel.entity.EntityAufStimmzettelDaten;
import de.ivu.elect.business.wahl.entity.Wahlart;
import de.ivu.elect.business.wahlvorschlag.entity.ReferendumOption;

public interface StimmeingabeReferendumOptionStimmenErfassenLabelGenerator {

  /**
   * Kennzeichnet die Stimmen einer ReferendumOption. Üblicherweise ein Kürzel aus Buchstaben und/oder Ziffern.
   */
  String getReferendumOptionStimmenKennung(EntityAufStimmzettelDaten entityAufStimmzettelDaten, @Nullable ReferendumOption referendumOption, GruppeImGebiet gruppeImGebiet,
      Collection<GruppeImGebiet> gruppenImGebiet);

  /**
   * Bezeichnet die Stimmen einer ReferendumOption. Üblicherweise eine kurze, textuelle Beschreibung.
   */
  String getReferendumOptionStimmenBezeichnung(EntityAufStimmzettelDaten entityAufStimmzettelDaten, @Nullable ReferendumOption referendumOption, GruppeImGebiet gruppeImGebiet,
      Collection<GruppeImGebiet> gruppenImGebiet);

  /**
   * Kennzeichnet eine konkrete Stimmeingabe, die Stimmen einer ReferendumOption erfasst. Üblicherweise ein Kürzel aus Buchstaben und/oder Ziffern.
   */
  String getReferendumOptionStimmenStimmeingabeKennung(EntityAufStimmzettelDaten entityAufStimmzettelDaten, Stimmeingabe stimmeingabe, Collection<GruppeImGebiet> gruppenImGebiet);

  /**
   * Bezeichnet eine konkrete Stimmeingabe, die Stimmen einer ReferendumOption erfast. Üblicherweise eine kurze, textuelle Beschreibung.
   */
  String getReferendumOptionStimmenStimmeingabeBezeichnung(EntityAufStimmzettelDaten entityAufStimmzettelDaten, Stimmeingabe stimmeingabe, Collection<GruppeImGebiet> gruppenImGebiet);

  boolean isAkzeptiertWahlart(Wahlart wahlart);

  boolean isStimmeingabeZwischensummeAnzahlUngueltigeGesamt(Stimmeingabe stimmeingabe);

  boolean isStimmeingabeZwischensummeAnzahlGueltigeGesamt(Stimmeingabe stimmeingabe);

  boolean isStimmeingabeZwischensummeAnzahlUebrigeGesamt(Stimmeingabe stimmeingabe);

  boolean isStimmeingabeZwischensummeAnzahlAbgegebenGesamt(Stimmeingabe stimmeingabe);
}
