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

import javax.enterprise.inject.Specializes;
import javax.inject.Inject;

import de.ivu.elect.business.dokumente.entity.DummyElectionCategoryType;
import de.ivu.elect.presentation.NlSystemProperties;
import de.ivu.elect.util.ElectRandom;

@Specializes
public class NlDokumenteKonfigurationInit extends DokumenteKonfigurationInit {

  @Inject
  private transient NlSystemProperties nlSystemProperties;

  @Override
  protected int getOpenOfficePortNumber() {
    return super.getOpenOfficePortNumber() + getWahlartOffset() * 10 + getElectionLevelOffset() * 100;
  }

  private int getElectionLevelOffset() {
    return nlSystemProperties.getDefaultElectionLevel(null/*spielt hier keine Rolle*/).ordinal(); // ELECT-10247
  }

  protected int getWahlartOffset() {

    try {
      return DummyElectionCategoryType.valueOf(System.getProperty("nl.election.category")).ordinal();
    } catch (Exception e) {
      return ElectRandom.getRandom().nextInt(100);
    }
  }

  @Override
  protected Long getMaxRetriesCancellation() {
    return 2L; // ELECT-13587
  }

  @Override
  protected int getDefaultTaskQueueTimeoutInMs() {
    return super.getDefaultTaskQueueTimeoutInMs() * 10; // ELECTVAPP-723 mehr Zeit geben, zehnmal soviel sollte reichen
  }

  @Override
  protected int getDefaultTaskExecutionTimeoutInMs() {
    return super.getDefaultTaskExecutionTimeoutInMs() * 10; // ELECTVAPP-723 mehr Zeit geben, zehnmal soviel sollte reichen
  }

  @Override
  protected int getDefaultProcessRetryIntervalInMs() {
    return super.getDefaultProcessRetryIntervalInMs() * 10; // ELECTVAPP-723 mehr Zeit geben, zehnmal soviel sollte reichen
  }

  @Override
  protected int getDefaultProcessTimeoutInMs() {
    return super.getDefaultProcessTimeoutInMs() * 10; // ELECTVAPP-723 mehr Zeit geben, zehnmal soviel sollte reichen
  }

  @Override
  protected boolean getDefaultFailFast() {
    return true; // ELECT-13587
  }
}
