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

import static de.ivu.elect.business.stimmeingabe.entity.StimmeingabePlausiFehlerart.ERROR;
import static de.ivu.elect.business.stimmeingabe.entity.StimmeingabePlausiFehlerart.WARNING;
import static de.ivu.elect.business.stimmeingabe.entity.StimmeingabePlausiGebietsart.URNENWAHLBEZIRK;
import static de.ivu.elect.business.stimmeingabe.entity.StimmeingabePlausiTyp.GUELTIGE_DIREKTSTIMMEN_ANZAHL_GLEICH_GRUPPE_DIREKTSTIMMEN_ANZAHLEN_SUMME;
import static de.ivu.elect.business.stimmeingabe.entity.StimmeingabePlausiTyp.GUELTIGE_DIREKTSTIMMEN_ANZAHL_GROESSER_NULL;
import static de.ivu.elect.business.stimmeingabe.entity.StimmeingabePlausiTyp.UNGUELTIGE_DIREKTSTIMMEN_ANZAHL_KLEINER_GLEICH_WAEHLER_GESAMT_ANZAHL_ANTEIL;
import static de.ivu.elect.business.stimmeingabe.entity.StimmeingabePlausiTyp.WAEHLER_GESAMT_ANZAHL_GLEICH_GUELTIGE_DIREKTSTIMMEN_ANZAHL_PLUS_UNGUELTIGE_DIREKTSTIMMEN_ANZAHL;
import static de.ivu.elect.business.stimmeingabe.entity.StimmeingabePlausiTyp.WAEHLER_GESAMT_ANZAHL_KLEINER_WAHLBERECHTIGTE_GESAMT_ANZAHL_ANTEIL;
import static de.ivu.elect.business.stimmeingabe.entity.StimmeingabePlausiTyp.WAEHLER_MIT_WAHLSCHEIN_ANZAHL_KLEINER_WAHLBERECHTIGTE_MIT_WAHLSCHEIN_ANZAHL_ANTEIL;

import de.ivu.elect.business.stimmeingabe.entity.StimmeingabePlausiErgebniseingangsart;
import de.ivu.elect.business.stimmeingabe.entity.StimmeingabePlausiGebietsart;
import de.ivu.elect.business.wahl.entity.CommonWahlart;
import de.ivu.elect.business.wahl.entity.Wahl;

public class DefaultDirektwahlStimmeingabePlausiDefinitions extends AbstractStimmeingabePlausiDefinitions {

  public DefaultDirektwahlStimmeingabePlausiDefinitions() {
    super(CommonWahlart.BUERGERMEISTERWAHL);
  }

  @Override
  protected void initDefaultsAlleGebietsarten(StimmeingabePlausiDefinitionsContext context, Wahl wahl, StimmeingabePlausiErgebniseingangsart ergebniseingangsart) {
    super.initDefaultsAlleGebietsarten(context, wahl, ergebniseingangsart);

    for (StimmeingabePlausiGebietsart gebietsart : StimmeingabePlausiGebietsart.values()) {
      initDefault(ergebniseingangsart, gebietsart, WAEHLER_GESAMT_ANZAHL_GLEICH_GUELTIGE_DIREKTSTIMMEN_ANZAHL_PLUS_UNGUELTIGE_DIREKTSTIMMEN_ANZAHL, ERROR);

      initDefault(ergebniseingangsart, gebietsart, GUELTIGE_DIREKTSTIMMEN_ANZAHL_GLEICH_GRUPPE_DIREKTSTIMMEN_ANZAHLEN_SUMME, ERROR);
      initDefault(ergebniseingangsart, gebietsart, GUELTIGE_DIREKTSTIMMEN_ANZAHL_GROESSER_NULL, WARNING);

      initDefault(ergebniseingangsart, gebietsart, UNGUELTIGE_DIREKTSTIMMEN_ANZAHL_KLEINER_GLEICH_WAEHLER_GESAMT_ANZAHL_ANTEIL, WARNING,
          new StimmeingabeAnzahlComparedToStimmeingabeAnzahlAnteilPlausiCustomData(0.05D));
    }
  }

  @Override
  protected void initDefaultsUrnenwahlbezirk(StimmeingabePlausiDefinitionsContext context, Wahl wahl, StimmeingabePlausiErgebniseingangsart ergebniseingangsart) {
    super.initDefaultsUrnenwahlbezirk(context, wahl, ergebniseingangsart);

    initDefault(ergebniseingangsart, URNENWAHLBEZIRK, WAEHLER_MIT_WAHLSCHEIN_ANZAHL_KLEINER_WAHLBERECHTIGTE_MIT_WAHLSCHEIN_ANZAHL_ANTEIL, WARNING,
        new StimmeingabeAnzahlComparedToStimmeingabeAnzahlAnteilPlausiCustomData(0.90D));

    initDefault(ergebniseingangsart, URNENWAHLBEZIRK, WAEHLER_GESAMT_ANZAHL_KLEINER_WAHLBERECHTIGTE_GESAMT_ANZAHL_ANTEIL, WARNING,
        new StimmeingabeAnzahlComparedToStimmeingabeAnzahlAnteilPlausiCustomData(0.60D));
  }
}
