/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.rjconsultores.ventaboletos.dao.hibernate;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.SessionFactory;
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.EstacionSitefDAO;
import com.rjconsultores.ventaboletos.entidad.Empresa;
import com.rjconsultores.ventaboletos.entidad.EstacionSitef;
import com.rjconsultores.ventaboletos.enums.TipoIntegracaoTEF;

/**
 * 
 * @author Lucas
 *
 */
@Repository("estacionSitefDAO")
public class EstacionSitefHibernateDAO extends GenericHibernateDAO<EstacionSitef, Integer> implements EstacionSitefDAO {

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

	@SuppressWarnings("unchecked")
	@Override
	public EstacionSitef buscar(Empresa empresa, Integer numempresa, Integer numfilial, String numpdv) {
		Criteria c = getSession().createCriteria(getPersistentClass());
        c.add(Restrictions.eq("empresa", empresa));
        c.add(Restrictions.eq("numempresa", numempresa));
        c.add(Restrictions.eq("numfilial", numfilial));
        c.add(Restrictions.eq("numpdv", numpdv));
        c.add(Restrictions.eq(ACTIVO, true));
        List<EstacionSitef> estacionsSitef = c.list();
        return estacionsSitef.isEmpty() ? null : estacionsSitef.get(0);
	}
	
	@SuppressWarnings("unchecked")
	@Override
	public EstacionSitef buscar(Empresa empresa, TipoIntegracaoTEF tipoIntegracaoTEF, String numpdv, Integer numfilial) {
		Criteria c = getSession().createCriteria(getPersistentClass());
		c.add(Restrictions.eq("empresa", empresa));
		c.add(Restrictions.or(Restrictions.isNull("tipoIntegracao"), Restrictions.eq("tipoIntegracao", tipoIntegracaoTEF != null ? tipoIntegracaoTEF : TipoIntegracaoTEF.SITEF)));
		c.add(Restrictions.eq("numpdv", numpdv));
		c.add(Restrictions.eq(ACTIVO, true));
		c.add(Restrictions.eq("numfilial", numfilial));
		
		List<EstacionSitef> estacionsSitef = c.list();
		return estacionsSitef.isEmpty() ? null : estacionsSitef.get(0);
	}

}
