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

import javax.inject.Inject;

import de.ivu.elect.business.stimmzettel.boundary.AnzahlStimmenProWaehlerBestimmer;
import de.ivu.elect.business.wahl.entity.AbstractWahlParameterLoader;
import de.ivu.elect.business.wahl.entity.Wahl;
import de.ivu.elect.business.wahl.entity.WahlartErgebnisart;
import de.ivu.elect.business.wahlvorschlag.entity.Liste;

public abstract class AbstractListenwahlStimmeingabeKonfiguration extends AbstractStimmeingabeKonfiguration implements CustomListenwahlStimmeingabeKonfiguration {

  private static final long serialVersionUID = 1L;

  @Inject
  protected transient AnzahlStimmenProWaehlerBestimmer anzahlStimmenProWaehlerBestimmer;

  protected AbstractListenwahlStimmeingabeKonfiguration() {
    super();
  }

  /**
   * @return true, falls die "Stimmzettel für genau einen Wahlvorschlag unverändert" manuell auszuzählen sind, um dann diese Stimmen ebenfalls manuell (und NICHT automatisch bei der Ergebnisübernahme)
   *         auf die Listenkandidaturen zu verteilen...
   */
  public boolean isStimmzettelNurEinzelnerWahlvorschlagUnveraendertManuellAuszuzaehlen(AbstractWahlParameterLoader wahlParameterLoader, Wahl wahl, WahlartErgebnisart ergebnisart) {
    return isStimmzetteleingabeGruppeStimmenNurEinzelnerWahlvorschlagUnveraendertRelevant(wahlParameterLoader, wahl, ergebnisart);
  }

  /**
   * @return true, falls die "Stimmzettel für genau einen Wahlvorschlag mit Änderungen nur in diesem" manuell auszuzählen sind, um dann diese Stimmen ebenfalls manuell (und NICHT automatisch bei der
   *         Ergebnisübernahme) auf die Listenkandidaturen zu verteilen...
   */
  public boolean isStimmzettelNurEinzelnerWahlvorschlagVeraendertManuellAuszuzaehlen(AbstractWahlParameterLoader wahlParameterLoader, Wahl wahl, WahlartErgebnisart ergebnisart) {
    return isStimmzetteleingabeGruppeStimmenNurEinzelnerWahlvorschlagVeraendertRelevant(wahlParameterLoader, wahl, ergebnisart);
  }

  /**
   * @return true, falls die "Stimmzettel für genau einen Wahlvorschlag mit panaschierten Stimmen" manuell auszuzählen sind, um dann diese Stimmen ebenfalls manuell (und NICHT automatisch bei der
   *         Ergebnisübernahme) auf die Listenkandidaturen zu verteilen...
   */
  public boolean isStimmzettelNurEinzelnerWahlvorschlagPanaschiertManuellAuszuzaehlen(AbstractWahlParameterLoader wahlParameterLoader, Wahl wahl, WahlartErgebnisart ergebnisart) {
    return isStimmzetteleingabeGruppeStimmenNurEinzelnerWahlvorschlagPanaschiertRelevant(wahlParameterLoader, wahl, ergebnisart);
  }

  /**
   * A.k.a. "Stimmzettel für genau einen Wahlvorschlag unverändert"
   */
  @Override
  public boolean isStimmzetteleingabeGruppeStimmenNurEinzelnerWahlvorschlagUnveraendertRelevant(AbstractWahlParameterLoader wahlParameterLoader, Wahl wahl, WahlartErgebnisart ergebnisart) {
    return false;
  }

  /**
   * A.k.a. "Stimmzettel für genau einen Wahlvorschlag mit Änderungen nur in diesem"
   */
  @Override
  public boolean isStimmzetteleingabeGruppeStimmenNurEinzelnerWahlvorschlagVeraendertRelevant(AbstractWahlParameterLoader wahlParameterLoader, Wahl wahl, WahlartErgebnisart ergebnisart) {
    return false;
  }

  /**
   * A.k.a. "Stimmzettel für genau einen Wahlvorschlag mit panaschierten Stimmen"
   */
  @Override
  public boolean isStimmzetteleingabeGruppeStimmenNurEinzelnerWahlvorschlagPanaschiertRelevant(AbstractWahlParameterLoader wahlParameterLoader, Wahl wahl, WahlartErgebnisart ergebnisart) {
    return false;
  }

  /**
   * A.k.a. "Stimmzettel für genau einen Wahlvorschlag" (== "Stimmzettel für genau einen Wahlvorschlag unverändert" + "Stimmzettel für genau einen Wahlvorschlag mit Änderungen nur in diesem" +
   * "Stimmzettel für genau einen Wahlvorschlag mit panaschierten Stimmen")
   */
  public boolean isStimmzetteleingabeGruppeStimmenNurEinzelnerWahlvorschlagGesamtRelevant(AbstractWahlParameterLoader wahlParameterLoader, Wahl wahl, WahlartErgebnisart ergebnisart) {
    return false;
  }

  /**
   * A.k.a. "Gültige kumulierte und panaschierte Stimmen insgesamt"
   */
  @Override
  public boolean isStimmeingabeGruppeStimmenListenkandidaturenGesamtRelevant(AbstractWahlParameterLoader wahlParameterLoader, Wahl wahl, WahlartErgebnisart ergebnisart) {
    return false;
  }

  public long getAnzahlStimmenProWaehlerFuerListeMaximal(Liste liste) {
    return getAnzahlStimmenProWaehlerBestimmer().getAnzahlStimmenProWaehlerMaximal(liste);
  }

  protected AnzahlStimmenProWaehlerBestimmer getAnzahlStimmenProWaehlerBestimmer() {
    return anzahlStimmenProWaehlerBestimmer;
  }
}
