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

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;


import static java.util.Arrays.asList;

/**
 *  on 24.05.2017.
 */
public class SystemRequirements implements Serializable {

  private static final long serialVersionUID = 1L;

  public int getAnzahlProzessorKerne() {
    return 4; // willkürlich
  }

  public long getHttpMaxPostSize() {
    return 200_000_000L; // Betriebshandbuch/Checkliste Muc
  }

  public long getDefaultTransactionTimeout() {
    return 1800; // halbe Stunde
  }

  public long getSpeicherInBytes() {
    return 1L * 1024 * 1024 * 1024; // willkürlich
  }

  public long getFreeDiskSpaceInBytes() {
    return 1L * 1024 * 1024 * 1024; // willkürlich
  }

  public int getMaximumMaxPoolSize() {
    return 100;
  }

  public long getMaxParameters(){
    return 5_000; // ELECT-8432 (Betriebshandbuch)
  }

  public List<String> getStartParameters() {

    List<String> result = new ArrayList<>();
    result.addAll(getDefaultStartParameters());
    result.addAll(getCustomerStartParameters());

    if (!WildFlyServer.isThorntail()) {
      result.addAll(getWildflyExclusiveParameters());
    }

    return result;
  }

  public List<String> getStartParametersDuerfenNichtGesetztSein() {
    return new ArrayList<>();
  }

  protected List<String> getCustomerStartParameters() {
    return Collections.emptyList();
  }

  // HINT, diese Parameter werden von Thorntail-Installationen nicht gesetzt und sollten somit auch nicht in den Warnungen auftauchen
  protected List<String> getWildflyExclusiveParameters() {
    // return asList("-XX:+PrintGC", /*"-XX:+PrintGCTimeStamps", WASDE-1889 - Alternative nicht obligatorisch, keine Lust eine Unterscheidung zwischen JDK8 und11 einzubauen*/ "-XX:+PrintGCDetails");
    return Collections.emptyList(); // GC-Parameter deaktviert, Wildfly bietet GC-Logs mit Logrotation, für jedes JDK sind diese Parameter anders
  }

  protected List<String> getDefaultStartParameters() {
    return asList("-XX:+HeapDumpOnOutOfMemoryError");
  }

}
