package com.rjconsultores.ventaboletos.dao.hibernate;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Hibernate;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Order;
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.ExcepcionPeajeDAO;
import com.rjconsultores.ventaboletos.entidad.AbastoCentral;
import com.rjconsultores.ventaboletos.entidad.ExcepcionPeaje;
import com.rjconsultores.ventaboletos.entidad.ExcepcionPeajeVigencia;

@Repository("excepcionPeajeDAO")
public class ExcepcionPeajeHibernateDAO  extends GenericHibernateDAO<ExcepcionPeaje, Integer>
implements ExcepcionPeajeDAO {
	
	@Autowired
    public ExcepcionPeajeHibernateDAO(@Qualifier("sessionFactory") SessionFactory factory) {
        setSessionFactory(factory);
    }
	
	 public List<ExcepcionPeaje> buscar(String descconvenio, String cveconvenio) {
	        Criteria c = getSession().createCriteria(getPersistentClass());
	        c.add(Restrictions.eq(ACTIVO, Boolean.TRUE));
	        c.add(Restrictions.eq("descconvenio", descconvenio));
	        c.add(Restrictions.eq("cveconvenio", cveconvenio));

	        c.addOrder(Order.asc("descconvenio"));

	        return c.list();
	    }
	 
	 public List<ExcepcionPeaje> obtenerTodos() {
		 Session session = getSession();
		 session.enableFilter("ativo");
			Criteria c = getSession().createCriteria(getPersistentClass());
			c.add(Restrictions.eq(ACTIVO, Boolean.TRUE));
			
			List<ExcepcionPeaje> list = (List<ExcepcionPeaje>)c.list();
			for (ExcepcionPeaje excepcionPeaje : list) {
				if(!Hibernate.isInitialized(excepcionPeaje.getLsExcepcionPeajeVigencia())){
					Hibernate.initialize(excepcionPeaje.getLsExcepcionPeajeVigencia());
				}
			}
			return list;
		}

	@Override
	public void deletarVigencias(List<ExcepcionPeajeVigencia> excepcionPeajeVigencias) {

		for (ExcepcionPeajeVigencia epv : excepcionPeajeVigencias) {
			String hql = " update ExcepcionPeajeVigencia set activo = false, fecModif = :fecModif, usuarioId = :usuarioId where excepcionPeajeVigenciaId = " + epv.getExcepcionPeajeVigenciaId();
			Query sq = getSession().createQuery(hql);
			sq.setTimestamp("fecModif", epv.getFecmodif());
			sq.setInteger("usuarioId", epv.getUsuarioId());
			sq.executeUpdate();
		}
		
	}
}
