package xyz.danielcortes.repository;

import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import javax.persistence.TypedQuery;
import xyz.danielcortes.framework.PersistenceManager;
import xyz.danielcortes.models.Libro;

public class LibroRepository {

  private EntityManager em;

  public LibroRepository() {
    this.em = PersistenceManager.getEntityManager();
  }

  public List<Libro> getAll() {
    TypedQuery<Libro> query = em.createQuery("SELECT l FROM Libro l", Libro.class);
    return query.getResultList();
  }

  public void save(Libro libro) {
    em.getTransaction().begin();
    em.persist(libro);
    em.getTransaction().commit();
  }

  public void update(Libro libro) {
    em.getTransaction().begin();
    em.merge(libro);
    em.getTransaction().commit();
  }

  public void delete(Libro libro) {
    em.getTransaction().begin();
    em.remove(libro);
    em.getTransaction().commit();
  }

  public boolean exists(Integer serie, Integer id) {
   Query query = em.createQuery("SELECT count(l) FROM Libro l WHERE serie = :serie and id != :id");
   query.setParameter("serie", serie);
   query.setParameter("id", id);
   return (Long) query.getResultList().get(0) == 1;
  }
}
