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

import java.io.Serializable;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;

import javax.enterprise.context.ApplicationScoped;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import de.ivu.elect.business.ergebnis.entity.Ergebnis;
import de.ivu.elect.business.ergebnis.entity.ErgebnisPK;
import de.ivu.elect.business.ergebnis.entity.ErgebnisberechnungStatistik;
import de.ivu.elect.business.ergebnis.entity.ErgebnisberechnungStatistikEntry;

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

  private static final long serialVersionUID = 1L;

  private static final Logger LOG = LoggerFactory.getLogger(ErgebnisberechnungStatistikStore.class);

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

  public List<ErgebnisberechnungStatistikEntry> getStatistikFuerErgebnis(Ergebnis ergebnis) {
    if (statistiken.containsKey(ergebnis.getPk())) {
      return statistiken.get(ergebnis.getPk()).getEntries();
    }
    return Collections.emptyList();
  }

  public void add(ErgebnisPK ergebnisPK, ErgebnisberechnungStatistikEntry statistikEntry) {
    if (!statistiken.containsKey(ergebnisPK)) {
      statistiken.put(ergebnisPK, new ErgebnisberechnungStatistik());
    }
    ErgebnisberechnungStatistik ergebnisberechnungStatistik = statistiken.get(ergebnisPK);
    ergebnisberechnungStatistik.add(statistikEntry);
    LOG.info("Ergebnis berechnet: " + ergebnisPK + ", " + statistikEntry + ", Historie: " + ergebnisberechnungStatistik);
  }

}
