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

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.stream.Collectors;

import javax.enterprise.context.ApplicationScoped;

import de.ivu.elect.business.ergebnis.entity.ErgebnisPK;
import de.ivu.elect.business.praesentation.entity.PraesentationStatistik;
import de.ivu.elect.business.praesentation.entity.PraesentationStatistikEntry;

/**
 *  on 18.06.2015.
 */
@ApplicationScoped
public class PraesentationStatistikStore implements Serializable {

  private static final long serialVersionUID = 1L;

  private final Map<ErgebnisPK, PraesentationStatistik> statistiken = new ConcurrentHashMap<>();

  public List<PraesentationStatistikEntry> getStatistikFuerErgebnis(ErgebnisPK ergebnisPK) {
    if (statistiken.containsKey(ergebnisPK)) {
      return statistiken.get(ergebnisPK).getEntries();
    }
    return Collections.emptyList();
  }

  public PraesentationStatistik getPraesentationStatistik(ErgebnisPK ergebnisPK) {
    return statistiken.computeIfAbsent(ergebnisPK, x -> new PraesentationStatistik());
  }

  public Map<ErgebnisPK, List<PraesentationStatistikEntry>> getStatistiken() {
    Set<Map.Entry<ErgebnisPK, PraesentationStatistik>> entries = new HashSet<>(statistiken.entrySet());
    return entries.stream()
        .collect(Collectors.toMap(Map.Entry::getKey, entry -> new ArrayList<>(entry.getValue().getEntries()), (a, b) -> b));
  }

}
