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

import javax.annotation.Nullable;

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

// Spezielle Plausi aufgrund der Implementierung von StimmeingabePlausiFiktiveWerteFehlerBeheber...
public class GueltigeListenstimmenZwischensummeGroesserAnzahlPlausi extends StimmeingabeAnzahlGroesserAnzahlPlausi implements StimmeingabePlausiFiktiveWerteFehlerBeheber {

  private final Stimmeingabe stimmeingabeWaehlerGesamt;

  private final Stimmeingabe stimmeingabeUngueltigeListenstimmen;

  public GueltigeListenstimmenZwischensummeGroesserAnzahlPlausi(@Nullable Stimmeingabe stimmeingabeWaehlerGesamt, @Nullable Stimmeingabe stimmeingabeUngueltigeListenstimmen,
      StimmeingabePlausiKonfiguration stimmeingabePlausiKonfiguration, Messages messages) {
    super(StimmeingabeAnzahlReference.SYSTEM_GRUPPE_GUELTIGE_LISTENSTIMMEN_ZWISCHENSUMME, stimmeingabePlausiKonfiguration, messages);

    this.stimmeingabeWaehlerGesamt = stimmeingabeWaehlerGesamt;

    this.stimmeingabeUngueltigeListenstimmen = stimmeingabeUngueltigeListenstimmen;
  }

  @Override
  public void behebeFehler(Stimmeingabe stimmzetteleingabeWaehlerListenstimmen) throws StimmeingabePlausiFiktiveWerteFehlerNichtBehebbarException {
    if (stimmeingabeWaehlerGesamt != null && stimmeingabeUngueltigeListenstimmen != null) {
      if (stimmeingabeWaehlerGesamt.hasAnzahlGroesserGleichNull() && stimmeingabeUngueltigeListenstimmen.hasAnzahlGroesserGleichNull()) {
        stimmzetteleingabeWaehlerListenstimmen.setAnzahl(stimmeingabeWaehlerGesamt.getAnzahl() - stimmeingabeUngueltigeListenstimmen.getAnzahl());
      } else {
        throw new StimmeingabePlausiFiktiveWerteFehlerNichtBehebbarException(
            "Kann die Zahl der gültigen Listenstimmen nicht setzen [stimmeingabeWaehlerGesamt.hasAnzahlGroesserGleichNull() = " + stimmeingabeWaehlerGesamt.hasAnzahlGroesserGleichNull()
                + ", stimmeingabeUngueltigeListenstimmen.hasAnzahlGroesserGleichNull() = " + stimmeingabeUngueltigeListenstimmen.hasAnzahlGroesserGleichNull() + "]");
      }
    }
  }
}
