
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_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.STIMMEINGABE_ANZAHLEN_UNGLEICH_STIMMEINGABE_ANZAHLEN_IN_ANDEREN_ERFASSUNGSGEBIETEN;
import static de.ivu.elect.business.stimmeingabe.entity.StimmeingabePlausiTyp.UNGUELTIGE_LISTENSTIMMEN_ANZAHL_KLEINER_GLEICH_GUELTIGE_LISTENSTIMMEN_ANZAHL_ANTEIL;
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_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 EuwStimmeingabePlausiDefinitions extends AbstractStimmeingabePlausiDefinitions {

  public EuwStimmeingabePlausiDefinitions() {
    super(CommonWahlart.EUROPAWAHL);
  }

  @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_LISTENSTIMMEN_ANZAHL_PLUS_UNGUELTIGE_LISTENSTIMMEN_ANZAHL, 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, UNGUELTIGE_LISTENSTIMMEN_ANZAHL_KLEINER_GLEICH_GUELTIGE_LISTENSTIMMEN_ANZAHL_ANTEIL, WARNING,
          new StimmeingabeAnzahlComparedToStimmeingabeAnzahlAnteilPlausiCustomData(0.05D));
    }
  }

  protected boolean isInitUrnenwahlbezirkStimmeingabePlausiTypStimmeingabeAnzahlenUngleichStimmeingabeAnzahlenInAnderenErfassungsgebietenPlausi() {
    return true;
  }

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

    if (isInitUrnenwahlbezirkStimmeingabePlausiTypStimmeingabeAnzahlenUngleichStimmeingabeAnzahlenInAnderenErfassungsgebietenPlausi()) {
      initDefault(ergebniseingangsart, URNENWAHLBEZIRK, STIMMEINGABE_ANZAHLEN_UNGLEICH_STIMMEINGABE_ANZAHLEN_IN_ANDEREN_ERFASSUNGSGEBIETEN, WARNING); // ELECTMUC-2452, ELECTKOM-308
    }

    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_KLEINER_GLEICH_WAHLBERECHTIGTE_GESAMT_ANZAHL, WARNING);
  }
}
