package com.softgraf.vendas.model.repositorio;

import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;

import com.softgraf.vendas.model.entity.Produto;
import com.softgraf.vendas.model.repositorio.abstrato.AbstractRepositorio;

public class RepositorioProduto implements AbstractRepositorio<Produto> {

	private static final long serialVersionUID = 1475293380865414802L;
	private EntityManager em;

	public RepositorioProduto(EntityManager em) {
		this.em = em;
	}
	@Override
	public boolean adicionar(Produto produto) {
		EntityTransaction tx = em.getTransaction();
		try {
			
			tx.begin();
			em.persist(produto);
			tx.commit();
			
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
		
		return true;
	}

	@Override
	public Produto buscarPorId(Integer id) {
		return em.find(Produto.class, id);
	}
	
	public Produto buscarPorId(String id) {
		return buscarPorId(Integer.parseInt(id));
	}

	@Override
	public boolean atualizar(Produto produto) {
		EntityTransaction tx = em.getTransaction();
		try {
			
			tx.begin();
			em.merge(produto);
			tx.commit();
			
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
		
		return true;
	}

	@Override
	public boolean remover(Produto produto) {
		EntityTransaction tx = em.getTransaction();
		
		try {
			
			tx.begin();
			em.remove(produto);
			tx.commit();
			
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
		
		return true;
	}

	@Override
	public List<Produto> listarTodos() {
		return em.createQuery("from Produto", Produto.class).getResultList();
	}

	@Override
	public List<Produto> listarTodos(int maximo) {
		return em.createQuery("from Produto", Produto.class).setMaxResults(maximo).getResultList();
	}
	
	public List<Produto> listarPorNome(String nome) {
		return em.createQuery("Select p from Produto p where p.nome like :nomeProduto", Produto.class)
									  .setParameter("nomeProduto", nome)
									  .getResultList();
	}
}
