package com.softgraf.vendas.model.repositorio;

import java.util.List;

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

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

public class RepositorioEndereco implements AbstractRepositorio<Endereco>{

	private static final long serialVersionUID = -8330967557165428313L;
	private EntityManager em;

	public RepositorioEndereco(EntityManager em) {
		this.em = em;
	}

	@Override
	public boolean adicionar(Endereco endereco) {
		EntityTransaction tx = em.getTransaction();
		try {
			
			tx.begin();
			em.persist(endereco);
			tx.commit();
			
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
		
		return true;
	}

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

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

	@Override
	public List<Endereco> listarTodos() {
		return em.createQuery("from Endereco", Endereco.class).getResultList();
	}
	
	@Override
	public List<Endereco> listarTodos(int maximo) {
		return em.createQuery("from Endereco", Endereco.class).setMaxResults(maximo).getResultList();
	}
	
	
	public List<Endereco> listarPorRua(String rua) {
		return em.createQuery("Select e from Endereco e where e.rua like :nomeRua", Endereco.class)
									  .setParameter("nomeRua", rua)
									  .getResultList();
	}
	
	public List<Endereco> listarPorCidade(String cidade) {
		return em.createQuery("Select e from Endereco e where e.cidade like :nomeCidade", Endereco.class)
									  .setParameter("nomeCidade", cidade)
									  .getResultList();
	}
	
	public List<Endereco> listarPorUf(String uf) {
		return em.createQuery("Select e from Endereco e where e.cidade like :nomeUf", Endereco.class)
									  .setParameter("nomeCidade", uf)
									  .getResultList();
	}
	
}
