package de.ivu.elect.business.wahllokalsystem.control;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import javax.inject.Inject;

import de.ivu.elect.business.wahl.control.AbstractWahlParameterInit;
import de.ivu.elect.business.wahl.entity.Wahl;
import de.ivu.elect.business.wahl.entity.WahlParameter;
import de.ivu.elect.business.wahl.entity.Wahltermin;
import de.ivu.elect.business.wahlbeteiligung.entity.WahlbeteiligungAuswertungWahllokalsystemCreateParameters;
import de.ivu.elect.business.wahllokalsystem.entity.WahllokalsystenWahlbeteiligungUebernehmenBriefwahl;


import static de.ivu.elect.business.wahl.entity.WahlParameterWerte.WAHLLOKALSYSTEM_STATUS_OFFLINE_TIMEOUT_IN_SECONDS;
import static de.ivu.elect.business.wahl.entity.WahlParameterWerte.WAHLLOKALSYSTEM_WAHLBETEILIGUNG_UEBERNEHMEN_ANTEIL_NICHT_BETRACHTETER_GEBIETE_HOECHSTE_QUOTE;
import static de.ivu.elect.business.wahl.entity.WahlParameterWerte.WAHLLOKALSYSTEM_WAHLBETEILIGUNG_UEBERNEHMEN_ANTEIL_NICHT_BETRACHTETER_GEBIETE_NIEDRIGSTE_QUOTE;
// import static de.ivu.elect.business.wahl.entity.WahlParameterWerte.WAHLLOKALSYSTEM_WAHLBETEILIGUNG_UEBERNEHMEN_BRIEFWAHL_OHNE_EINGAENGE_BERUECKSICHTIGEN;
import static de.ivu.elect.business.wahl.entity.WahlParameterWerte.WAHLLOKALSYSTEM_WAHLBETEILIGUNG_UEBERNEHMEN_BRIEFWAHL_OHNE_EINGAENGE_BERUECKSICHTIGEN;
import static de.ivu.elect.business.wahl.entity.WahlParameterWerte.WAHLLOKALSYSTEM_WAHLBETEILIGUNG_UEBERNEHMEN_CRONTAB;
import static de.ivu.elect.business.wahl.entity.WahlParameterWerte.WAHLLOKALSYSTEM_WAHLBETEILIGUNG_UEBERNEHMEN_ERWARTETE_RUECKLAUFQUOTE_BRIEFWAHL;
import static de.ivu.elect.business.wahl.entity.WahlParameterWerte.WAHLLOKALSYSTEM_WAHLBETEILIGUNG_UEBERNEHMEN_MAXIMALE_ABWEICHUNG_IN_MINUTEN;
import static de.ivu.elect.business.wahl.entity.WahlParameterWerte.WAHLLOKALSYSTEM_WAHLBETEILIGUNG_UEBERNEHMEN_PUFFER_BIS_UEBERNAHME_IN_MINUTEN;
import static de.ivu.elect.business.wahl.entity.WahlParameterWerte.WAHLLOKALSYSTEM_WAHLBETEILIGUNG_UEBERNEHMEN_ZUKUENFTIGE_WERTE;

public class WahllokalsystemWahlParameterInit extends AbstractWahlParameterInit {

  @Inject
  private transient WahllokalsystemAktiv wahllokalsystemAktiv;

  @Override
  protected Collection<WahlParameter> createDefaultParameters(Wahltermin wahltermin, Wahl wahl) {
    List<WahlParameter> result = new ArrayList<>();

    add(result, WAHLLOKALSYSTEM_STATUS_OFFLINE_TIMEOUT_IN_SECONDS, 60); //ELECTMUC-2830
    add(result, WAHLLOKALSYSTEM_WAHLBETEILIGUNG_UEBERNEHMEN_CRONTAB, getDefaultCrontab());
    add(result, WAHLLOKALSYSTEM_WAHLBETEILIGUNG_UEBERNEHMEN_ZUKUENFTIGE_WERTE, WahlbeteiligungAuswertungWahllokalsystemCreateParameters.DEFAULR_ZUKUENFTIGE_WERTE_BERUECKSICHTIGEN);
    add(result, WAHLLOKALSYSTEM_WAHLBETEILIGUNG_UEBERNEHMEN_MAXIMALE_ABWEICHUNG_IN_MINUTEN, WahlbeteiligungAuswertungWahllokalsystemCreateParameters.DEFAULT_MIXIMALE_ABWEICHUNG_IN_MINUTEN);
    add(result, WAHLLOKALSYSTEM_WAHLBETEILIGUNG_UEBERNEHMEN_PUFFER_BIS_UEBERNAHME_IN_MINUTEN, 5);
    add(result, WAHLLOKALSYSTEM_WAHLBETEILIGUNG_UEBERNEHMEN_ERWARTETE_RUECKLAUFQUOTE_BRIEFWAHL, "0.95");
    add(result, WAHLLOKALSYSTEM_WAHLBETEILIGUNG_UEBERNEHMEN_BRIEFWAHL_OHNE_EINGAENGE_BERUECKSICHTIGEN,
        WahllokalsystenWahlbeteiligungUebernehmenBriefwahl.BRIEFWAEHLER_BERUECKSICHTIGEN_WENN_UEBERHAUPT_KEIN_GEBIET_ERFASST.name());
    add(result, WAHLLOKALSYSTEM_WAHLBETEILIGUNG_UEBERNEHMEN_ANTEIL_NICHT_BETRACHTETER_GEBIETE_NIEDRIGSTE_QUOTE, "0.15");
    add(result, WAHLLOKALSYSTEM_WAHLBETEILIGUNG_UEBERNEHMEN_ANTEIL_NICHT_BETRACHTETER_GEBIETE_HOECHSTE_QUOTE, "0.01");

    return result;
  }

  protected String getDefaultCrontab() {
    if (wahllokalsystemAktiv.isAktiv()) {
      return "* * * * * ";
    }
    return "";
  }

}
