package com.rjconsultores.ventaboletos.dao.hibernate;


import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.MatchMode;
import org.hibernate.criterion.Restrictions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Repository;

import com.rjconsultores.ventaboletos.dao.ClienteCorporativoDAO;
import com.rjconsultores.ventaboletos.entidad.ClienteCorporativo;

@Repository("clienteCorporativoDAO")
@SuppressWarnings("unchecked")
public class ClienteCorporativoHibernateDAO extends GenericHibernateDAO<ClienteCorporativo, Long>
		implements ClienteCorporativoDAO {

	@Autowired
	public ClienteCorporativoHibernateDAO(@Qualifier("sessionFactory") SessionFactory factory) {
		setSessionFactory(factory);
	}

	@Override
	public ClienteCorporativo existe(Integer classe, Integer alias, Integer orgaoConcedente, Integer aliasClasseId) {
		Criteria c = makeCriteria();

		c.add(Restrictions.eq(ACTIVO, Boolean.TRUE));
		if( classe != null ) {
			c.add(Restrictions.eq("classe.claseservicioId",classe));	
		}
		
		if ( alias != null ) {
			c.add(Restrictions.eq("alias.claseservicioId",alias));	
		}
		
		if( orgaoConcedente != null ) {			
			c.add(Restrictions.eq("orgaoConcedente.orgaoConcedenteId", orgaoConcedente));
		}
		
		if( aliasClasseId != null ) {
			c.add(Restrictions.eq("aliasClasseId",aliasClasseId));	
		}
		
		return (ClienteCorporativo) c.uniqueResult();
	}

	@Override
	public List<ClienteCorporativo> buscar(Integer classe, Integer alias, Integer orgaoConcedente) {
		Criteria c = makeCriteria();
		c.add(Restrictions.eq(ACTIVO, Boolean.TRUE));
		if( classe != null ) {
			c.add(Restrictions.eq("classe.claseservicioId",classe));	
		}
		
		if ( alias != null ) {
			c.add(Restrictions.eq("alias.claseservicioId",alias));	
		}
		
		if( orgaoConcedente != null ) {			
			c.add(Restrictions.eq("orgaoConcedente.orgaoConcedenteId", orgaoConcedente));
		}
		
		return c.list();
	}

	@Override
	public List<ClienteCorporativo> buscaLike(String nome) {
		Criteria c = makeCriteria();
		c.add(Restrictions.eq(ACTIVO, Boolean.TRUE));
		
		if( nome != null ) {
			c.add(Restrictions.like("nomeClienteCorp", nome, MatchMode.ANYWHERE));	
		}
		
		return c.list();
	}

}
