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

import java.io.Serializable;
import java.util.function.Consumer;

import javax.annotation.Nonnull;

/**
 *  on 31.10.2016.
 */
public class BackgroundServiceStatus implements Serializable, Comparable<BackgroundServiceStatus> {

  private static final long serialVersionUID = 1L;

  private final SystemLogQuelle systemLogQuelle;
  private final boolean laeuftGerade;
  private final long runningCount;
  private final boolean deaktiviert;
  private final long anzahlTodoCheck;
  private final long anzahlAufrufe;
  private final long anzahlFehler;
  private final long zeitInMsInsgesamt;
  private final Consumer<Boolean> disableToggle;

  public BackgroundServiceStatus(SystemLogQuelle systemLogQuelle, boolean laeuftGerade, long runningCount, boolean deaktiviert, long anzahlTodoCheck, long anzahlAufrufe, long anzahlFehler, long zeitInMsInsgesamt, Consumer<Boolean> disableToggle) {
    this.systemLogQuelle = systemLogQuelle;
    this.laeuftGerade = laeuftGerade;
    this.runningCount = runningCount;
    this.deaktiviert = deaktiviert;
    this.anzahlTodoCheck = anzahlTodoCheck;
    this.anzahlAufrufe = anzahlAufrufe;
    this.anzahlFehler = anzahlFehler;
    this.zeitInMsInsgesamt = zeitInMsInsgesamt;
    this.disableToggle = disableToggle;
  }

  public SystemLogQuelle getSystemLogQuelle() {
    return systemLogQuelle;
  }

  public boolean isLaeuftGerade() {
    return laeuftGerade;
  }

  public boolean isDeaktiviert() {
    return deaktiviert;
  }

  public boolean isAktiviert() {
    return !isDeaktiviert();
  }

  public long getAnzahlAufrufe() {
    return anzahlAufrufe;
  }

  public long getZeitInMsInsgesamt() {
    return zeitInMsInsgesamt;
  }

  public long getAnzahlFehler() {
    return anzahlFehler;
  }

  public long getAnzahlTodoCheck() {
    return anzahlTodoCheck;
  }

  @Override
  public int compareTo(@Nonnull BackgroundServiceStatus other) {
    return this.getSystemLogQuelle().compareTo(other.getSystemLogQuelle());
  }

  public Long getId() {
    return (long) getSystemLogQuelle().ordinal();
  }

  @Override
  public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;

    BackgroundServiceStatus that = (BackgroundServiceStatus) o;

    return systemLogQuelle == that.systemLogQuelle;

  }

  @Override
  public int hashCode() {
    return systemLogQuelle.hashCode();
  }

  public Consumer<Boolean> getDisableToggle() {
    return disableToggle;
  }

  public long getRunningCount() {
    return runningCount;
  }
}
