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

import java.util.Date;
import java.util.List;
import java.util.Optional;
import java.util.function.Supplier;

import javax.ejb.Stateless;
import javax.inject.Inject;

import de.ivu.elect.business.protokollierung.entity.ProtokollEintrag;
import de.ivu.elect.jee.entity.Entity;
import de.ivu.elect.jee.protokollierung.ProtokollFlashback;

/**
 *  on 15.02.2017.
 */
@Stateless
public class ElectProtokollFlashback {

  @Inject
  ProtokollEintragDAO protokollEintragDAO;

  @Inject
  ProtokollFlashback protokollFlashback;

  public <E extends Entity> Optional<E> flashback(E aktuelleVersion, Supplier<E> entityCreator, Date flashbackZeitpunt) {

    if (aktuelleVersion==null || aktuelleVersion.getId() == null || aktuelleVersion.getPk() == null || flashbackZeitpunt == null) {
      return Optional.empty();
    }

    List<ProtokollEintrag> eintraege = protokollEintragDAO.findByEntitaetPrimaerschluesselAbZeitpunkt(aktuelleVersion.getEntityTechnicalName(), aktuelleVersion.getId(), flashbackZeitpunt);
//    System.out.println("eintraege = " + eintraege);
//    for (ProtokollEintrag protokollEintrag : eintraege) {
//      System.out.println("protokollEintrag.getAttribut() = " + protokollEintrag.getAttribut());
//      System.out.println("protokollEintrag.getZeitpunkt() = " + protokollEintrag.getZeitpunkt());
//      System.out.println("protokollEintrag.getAlterWert() = " + protokollEintrag.getAlterWert());
//      System.out.println("protokollEintrag.getNeuerWert() = " + protokollEintrag.getNeuerWert());
//    }
    return protokollFlashback.flashback(aktuelleVersion, entityCreator, eintraege, flashbackZeitpunt);
  }

}
