
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.GRUPPE_DIREKTSTIMMEN_ANZAHLEN_UNGLEICH_GRUPPE_LISTENSTIMMEN_ANZAHLEN;
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.GUELTIGE_LISTENSTIMMEN_ABZUZIEHEN_ANZAHL_GLEICH_GRUPPE_LISTENSTIMMEN_ABZUZIEHEN_ANZAHLEN_SUMME;
import static de.ivu.elect.business.stimmeingabe.entity.StimmeingabePlausiTyp.GUELTIGE_LISTENSTIMMEN_ANZAHL_GLEICH_GRUPPE_LISTENSTIMMEN_ANZAHLEN_SUMME;
import static de.ivu.elect.business.stimmeingabe.entity.StimmeingabePlausiTyp.GUELTIGE_LISTENSTIMMEN_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.UNGUELTIGE_LISTENSTIMMEN_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_GLEICH_GUELTIGE_LISTENSTIMMEN_ANZAHL_PLUS_UNGUELTIGE_LISTENSTIMMEN_ANZAHL;
import static de.ivu.elect.business.stimmeingabe.entity.StimmeingabePlausiTyp.WAEHLER_GESAMT_ANZAHL_GROESSER_WAHLBERECHTIGTE_GESAMT_ANZAHL_ANTEIL;
import static de.ivu.elect.business.stimmeingabe.entity.StimmeingabePlausiTyp.WAEHLER_GESAMT_ANZAHL_KLEINER_GLEICH_WAHLBERECHTIGTE_GESAMT_ANZAHL;
import static de.ivu.elect.business.stimmeingabe.entity.StimmeingabePlausiTyp.WAEHLER_MIT_WAHLSCHEIN_ANZAHL_KLEINER_WAHLBERECHTIGTE_MIT_WAHLSCHEIN_ANZAHL;
import static de.ivu.elect.business.stimmeingabe.entity.StimmeingabePlausiTyp.WAEHLER_MIT_WAHLSCHEIN_ANZAHL_KLEINER_WAHLBERECHTIGTE_MIT_WAHLSCHEIN_ANZAHL_ANTEIL;
import static de.ivu.elect.business.stimmeingabe.entity.StimmeingabePlausiTyp.WAEHLER_MIT_WAHLSCHEIN_ANZAHL_KLEINER_WAHLBERECHTIGTE_MIT_WAHLSCHEIN_ANZAHL_PLUS_WAHLBERECHTIGTE_NICHT_IM_WAEHLERVERZEICHNIS_ANZAHL;
import static de.ivu.elect.business.stimmeingabe.entity.StimmeingabePlausiTyp.WAEHLER_MIT_WAHLSCHEIN_ANZAHL_KLEINER_WAHLBERECHTIGTE_MIT_WAHLSCHEIN_ANZAHL_PLUS_WAHLBERECHTIGTE_NICHT_IM_WAEHLERVERZEICHNIS_ANZAHL_ANTEIL;

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

public class BtwStimmeingabePlausiDefinitions extends AbstractStimmeingabePlausiDefinitions {

  public BtwStimmeingabePlausiDefinitions() {
    super(CommonWahlart.BUNDESTAGSWAHL);
  }

  @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, WAEHLER_GESAMT_ANZAHL_GLEICH_GUELTIGE_LISTENSTIMMEN_ANZAHL_PLUS_UNGUELTIGE_LISTENSTIMMEN_ANZAHL, ERROR);

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

      initDefault(ergebniseingangsart, gebietsart, GUELTIGE_LISTENSTIMMEN_ANZAHL_GLEICH_GRUPPE_LISTENSTIMMEN_ANZAHLEN_SUMME, ERROR);
      initDefault(ergebniseingangsart, gebietsart, GUELTIGE_LISTENSTIMMEN_ANZAHL_GROESSER_NULL, ERROR);

      initDefault(ergebniseingangsart, gebietsart, GUELTIGE_LISTENSTIMMEN_ABZUZIEHEN_ANZAHL_GLEICH_GRUPPE_LISTENSTIMMEN_ABZUZIEHEN_ANZAHLEN_SUMME, ERROR);

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

      initDefault(ergebniseingangsart, gebietsart, GRUPPE_DIREKTSTIMMEN_ANZAHLEN_UNGLEICH_GRUPPE_LISTENSTIMMEN_ANZAHLEN, WARNING);
    }
  }

  @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, WARNING);
    initDefault(ergebniseingangsart, URNENWAHLBEZIRK, WAEHLER_MIT_WAHLSCHEIN_ANZAHL_KLEINER_WAHLBERECHTIGTE_MIT_WAHLSCHEIN_ANZAHL_PLUS_WAHLBERECHTIGTE_NICHT_IM_WAEHLERVERZEICHNIS_ANZAHL, WARNING);

    StimmeingabePlausiKonfigurationCustomData waehlerMitWahlscheinKleinerWahlberechtigteAnteilCustomData = new StimmeingabeAnzahlComparedToStimmeingabeAnzahlAnteilPlausiCustomData(0.95D);

    initDefault(ergebniseingangsart, URNENWAHLBEZIRK, WAEHLER_MIT_WAHLSCHEIN_ANZAHL_KLEINER_WAHLBERECHTIGTE_MIT_WAHLSCHEIN_ANZAHL_ANTEIL, WARNING,
        waehlerMitWahlscheinKleinerWahlberechtigteAnteilCustomData);
    initDefault(ergebniseingangsart, URNENWAHLBEZIRK, WAEHLER_MIT_WAHLSCHEIN_ANZAHL_KLEINER_WAHLBERECHTIGTE_MIT_WAHLSCHEIN_ANZAHL_PLUS_WAHLBERECHTIGTE_NICHT_IM_WAEHLERVERZEICHNIS_ANZAHL_ANTEIL,
        WARNING, waehlerMitWahlscheinKleinerWahlberechtigteAnteilCustomData);

    initDefault(ergebniseingangsart, URNENWAHLBEZIRK, WAEHLER_GESAMT_ANZAHL_GROESSER_WAHLBERECHTIGTE_GESAMT_ANZAHL_ANTEIL, WARNING,
        new StimmeingabeAnzahlComparedToStimmeingabeAnzahlAnteilPlausiCustomData(0.20D));
    initDefault(ergebniseingangsart, URNENWAHLBEZIRK, WAEHLER_GESAMT_ANZAHL_KLEINER_GLEICH_WAHLBERECHTIGTE_GESAMT_ANZAHL, WARNING);
  }
}
