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

import javax.inject.Inject;

import de.ivu.elect.business.stimmeingabe.boundary.StimmeingabeErfassenDescriptionResolver;
import de.ivu.elect.business.stimmeingabe.control.StimmeingabeKopfzahlKonfiguration;
import de.ivu.elect.business.stimmeingabe.entity.Ergebniseingang;
import de.ivu.elect.business.stimmeingabe.entity.StimmeingabeKopfzahlErfassenModel;
import de.ivu.elect.business.stimmeingabe.entity.StimmeingabePlausiFehlerart;
import de.ivu.elect.jee.faces.Messages;

public class BtwKopfzahlPlausiBuilder extends AbstractKopfzahlPlausiBuilder {

  @Inject
  private transient BtwStimmeingabePlausiDefinitions btwStimmeingabePlausiDefinitions;

  public BtwKopfzahlPlausiBuilder() {
    super();
  }

  @Deprecated // nur für Tests
  public BtwKopfzahlPlausiBuilder(Messages messages, StimmeingabeErfassenDescriptionResolver stimmeingabeErfassenDescriptionResolver,
      StimmeingabeKopfzahlKonfiguration stimmeingabeKopfzahlKonfiguration) {
    super(messages, stimmeingabeErfassenDescriptionResolver, stimmeingabeKopfzahlKonfiguration);
  }

  @Override
  protected AbstractStimmeingabePlausiDefinitions getStimmeingabePlausiDefinitions(Ergebniseingang ergebniseingang) {
    return btwStimmeingabePlausiDefinitions;
  }

  @Override
  protected void fillKopfzahlPlausisWahlartSpezifisch(StimmeingabeKopfzahlErfassenModel model, StimmeingabePlausiBuilderContext context) {
    if (!isBriefwahl(context)) {
      if (isSonderstimmbezirk(context)) {
        fillSonderstimmbezirkWahlberechtigtePlausis(model, context);
        fillSonderstimmbezirkWaehlerPlausis(model, context);
      } else {
        fillUrnenwahlbezirkWahlberechtigteAnzahlGleichWahlberechtigteAnzahlAmGebietPlausis(model, context);
        fillUrnenwahlbezirkKopfzahlSummenPlausis(model, context);
        fillUrnenwahlbezirkKopfzahlVergleichPlausis(model, context);
      }
    }

    fillKopfzahlEndgueltigMitVorlaeufigerStimmeingabeVergleichPlausis(model, context);
  }

  private void fillUrnenwahlbezirkKopfzahlVergleichPlausis(StimmeingabeKopfzahlErfassenModel model, StimmeingabePlausiBuilderContext context) {
    boolean stimmeingabeWahlberechtigteNichtImWaehlerverzeichnisRelevant = true;

    fillDefaultUrnenwahlbezirkKopfzahlVergleichPlausis(model, context, stimmeingabeWahlberechtigteNichtImWaehlerverzeichnisRelevant, 0.20D, 0.95D, StimmeingabePlausiFehlerart.WARNING, 0.95D);

    addPlausiWaehlerMitWahlscheinInUrnenwahlAnzahlAusBriefwahl(model, context);

    addPlausiWaehlerMitWahlscheinKleinerWahlberechtigteMitWahlschein(model, context, stimmeingabeWahlberechtigteNichtImWaehlerverzeichnisRelevant);
  }
}
