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

import javax.annotation.Nonnull;

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

public class StimmeingabeAnzahlKonvertierbarPlausi extends AbstractStimmeingabePlausi {

  private final Long anzahlMax;

  public StimmeingabeAnzahlKonvertierbarPlausi(StimmeingabePlausiKonfiguration stimmeingabePlausiKonfiguration, Messages messages) {
    super(stimmeingabePlausiKonfiguration, messages);

    Long anzahlMax = null;

    if (stimmeingabePlausiKonfiguration.getCustomData() instanceof StimmeingabeAnzahlKonvertierbarPlausiCustomData) {
      anzahlMax = ((StimmeingabeAnzahlKonvertierbarPlausiCustomData) stimmeingabePlausiKonfiguration.getCustomData()).getAnzahlMax();
    }

    if (anzahlMax == null || anzahlMax < 1) {
      anzahlMax = Long.MAX_VALUE;
    }

    this.anzahlMax = anzahlMax;
  }

  @Override
  protected StimmeingabePlausiResult calculatePlausiResult(@Nonnull Stimmeingabe stimmeingabe) {
    if (stimmeingabe.isAnzahlEingabeZuKonvertieren() && stimmeingabe.hasAnzahlEingabe() && (!stimmeingabe.hasAnzahlGroesserGleichNull() || stimmeingabe.getAnzahl() > getAnzahlMax())) {
      return createPlausiResultOhneFiktiveWerteFehlerBeheber(stimmeingabe);
    }

    return StimmeingabePlausiResult.KEIN_FEHLER;
  }

  private Long getAnzahlMax() {
    return anzahlMax;
  }

  @Override
  protected boolean isPlausiResultCalculatedAutomatischKorrigierbar() {
    return false; // Plausi prüft nur auf Gültigkeit/Konvertierbarkeit, also kein SOLL-Wert vorhanden!
  }
}
