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

import java.util.List;

import javax.inject.Inject;

import org.apache.commons.lang3.StringUtils;

import de.ivu.elect.business.benutzerverwaltung.boundary.AngemeldeteBenutzer;
import de.ivu.elect.business.benutzerverwaltung.entity.AngemeldeterBenutzer;
import de.ivu.elect.jee.performance.PerformanceStore;
import de.ivu.elect.jee.performance.ViewAccessStatistics;
import de.ivu.elect.jee.performance.ViewAccessTargetStatistics;

public class PerformanceStatistik {

  @Inject
  private transient AngemeldeteBenutzer angemeldeteBenutzer;

  public List<ViewAccessTargetStatistics> search(PerformanceStatistikSearchParameters searchParameters, ViewAccessStatistics snaphost) {
    List<ViewAccessTargetStatistics> statistics = PerformanceStore.getStatictics().getStatistics();

    statistics = searchParameters.getStatistikViewZeitraum().passeAnZeitraumAn(statistics, snaphost);

    statistics = searchParameters.getStatistikViewType().filter(statistics);
    statistics = searchParameters.getStatistikSessionType().filterGruppiere(statistics, bestimmeSessionId(searchParameters.getNutzer()));
    statistics = searchParameters.getStatistikViewAccessType().filterGruppiere(statistics);

    return statistics;
  }

  private String bestimmeSessionId(String nutzer) {
    if (StringUtils.isBlank(nutzer)) {
      return null;
    }
    return angemeldeteBenutzer.getAngemeldeteBenutzerNoPermissionCheck().stream()
        .filter(angemeldeterBenutzer -> nutzer.equals(angemeldeterBenutzer.getNameSessionIdGui()))
        .findFirst()
        .map(AngemeldeterBenutzer::getSessionId)
        .orElse(null);
  }

  public boolean isStatistikAktiviert() {
    return PerformanceStore.isStatistikAktiviert();
  }

  public boolean isStatistikLoggingAktiviert() {
    return PerformanceStore.isStatistikLoggingAktiviert();
  }

}
