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

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

public abstract class AbstractListenkandidaturListenstimmenAnzahlComparedToTheoretischeAnzahlPlausi extends AbstractStimmeingabeAnzahlComparedToPlausi {

  private final Long anzahlNennungen;

  private final boolean stimmzettelNurEinzelnerWahlvorschlagUnveraendertManuellAuszuzaehlen;

  private final Stimmeingabe stimmzetteleingabeGruppeNurEinzelnerWahlvorschlagUnveraendert;

  protected AbstractListenkandidaturListenstimmenAnzahlComparedToTheoretischeAnzahlPlausi(Long anzahlNennungen, boolean stimmzettelNurEinzelnerWahlvorschlagUnveraendertManuellAuszuzaehlen,
      Stimmeingabe stimmzetteleingabeGruppeNurEinzelnerWahlvorschlagUnveraendert, AbstractStimmeingabeAnzahlComparedToPlausiDefinition stimmeingabeAnzahlComparedToPlausiDefinition,
      StimmeingabePlausiKonfiguration stimmeingabePlausiKonfiguration, Messages messages) {
    super(stimmeingabeAnzahlComparedToPlausiDefinition, stimmeingabePlausiKonfiguration, messages);

    // Anzahl Nennungen DER Listenkandidatur, NICHT Anzahl Stimmen pro Wähler pro Listenkandidatur maximal!
    this.anzahlNennungen = anzahlNennungen;

    this.stimmzettelNurEinzelnerWahlvorschlagUnveraendertManuellAuszuzaehlen = stimmzettelNurEinzelnerWahlvorschlagUnveraendertManuellAuszuzaehlen;

    this.stimmzetteleingabeGruppeNurEinzelnerWahlvorschlagUnveraendert = stimmzetteleingabeGruppeNurEinzelnerWahlvorschlagUnveraendert;
  }

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

  protected boolean isWaehlerBenannteListenkandidaturSonstige(Stimmeingabe stimmeingabe) {
    return WaehlerBenannteKandidaturen.isWaehlerBenannteListenkandidaturSonstige(getMessages(), stimmeingabe.getListenkandidatur());
  }

  protected long getAnzahlStimmenNurEinzelnerWahlvorschlagUnveraendert() {
    if (isStimmzettelNurEinzelnerWahlvorschlagUnveraendertManuellAuszuzaehlen()) {
      return getAnzahlNennungen() * getAnzahlStimmzettelNurEinzelnerWahlvorschlagUnveraendert();
    }

    return 0L;
  }

  protected Long getAnzahlNennungen() {
    return anzahlNennungen;
  }

  protected boolean isStimmzettelNurEinzelnerWahlvorschlagUnveraendertManuellAuszuzaehlen() {
    return stimmzettelNurEinzelnerWahlvorschlagUnveraendertManuellAuszuzaehlen;
  }

  protected Long getAnzahlStimmzettelNurEinzelnerWahlvorschlagUnveraendert() {
    return fixNullToZero(stimmzetteleingabeGruppeNurEinzelnerWahlvorschlagUnveraendert);
  }
}
