package com.arrebol.taxiservicios.controller.catalog;
/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */


import com.arrebol.taxiservicios.controller.connection.ConnectionManager;
import com.arrebol.taxiservicios.controller.util.HibernateUtil;
import com.arrebol.taxiservicios.model.catalog.ClaveUnidad;
import com.arrebol.taxiservicios.model.core.User;
import com.arrebol.taxiservicios.model.enums.BasicType;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import java.util.UUID;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.CriteriaUpdate;
import javax.persistence.criteria.Path;
import javax.persistence.criteria.Root;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.hibernate.HibernateException;
import org.hibernate.Session;
import org.hibernate.Transaction;

/**
 *
 * @author Oscar
 */
public class ClaveUnidadController extends ConnectionManager implements Serializable{
    
    public List<ClaveUnidad> fillClaveUnidadDatatable() {

        Transaction transaction = null;
        List<ClaveUnidad> result = null;

        try {
            logger.info("Searching all locations..");
            Session session = HibernateUtil.getSessionFactory().getCurrentSession();
            transaction = session.beginTransaction();
            CriteriaBuilder builder = session.getCriteriaBuilder();

            CriteriaQuery<ClaveUnidad> criteria = builder.createQuery(ClaveUnidad.class);
            Root<ClaveUnidad> root = criteria.from(ClaveUnidad.class);

            Path<String> idPath = root.get("id");
            Path<String> nombrePath = root.get("nombre");
            Path<String> claveUnidadPath = root.get("claveUnidad");
         

            criteria.select(
                    builder.construct(ClaveUnidad.class, idPath,claveUnidadPath, nombrePath));
            
            criteria.orderBy(builder.asc(root.get("claveUnidad")));
            result = session.createQuery(criteria).getResultList();

            logger.info("Total of clave unidad found : " + (null == result ? -1 : result.size()));
            transaction.commit();
        } catch (HibernateException e) {
            logger.error("Can not load list of clave unidad ", e);
            rollback(transaction);
        } catch (Exception e) {
            rollback(transaction);
        }

        return result;
    }
    
     public ClaveUnidad getById(String claveUnidadId) {
        logger.info("getById");

        ClaveUnidad sanction = null;
        Transaction transaction = null;
        try {
            Session session = HibernateUtil.getSessionFactory().getCurrentSession();
            transaction = session.beginTransaction();

            sanction = session.get(ClaveUnidad.class, claveUnidadId);

            transaction.commit();
            logger.info("User " + sanction);
        } catch (HibernateException e) {
            logger.error("User cannot be loaded " + claveUnidadId, e);
            rollback(transaction);
        } catch (Exception e) {
            logger.error("Method getById(" + claveUnidadId + ") ", e);
            rollback(transaction);
        }
        return sanction;
    }
    
   public List<ClaveUnidad> getClaveUnidadLike(String like) {
        logger.info("getClaveUnidadsLike");

        List<ClaveUnidad> resultList = null;
        Transaction transaction = null;
        try {
            logger.info("Searching for claveProsuctoServicio..");
            Session session = HibernateUtil.getSessionFactory().getCurrentSession();
            transaction = session.beginTransaction();
            CriteriaBuilder builder = session.getCriteriaBuilder();

            CriteriaQuery<ClaveUnidad> criteria = builder.createQuery(ClaveUnidad.class);
            Root<ClaveUnidad> root = criteria.from(ClaveUnidad.class);

            Path<String> idPath = root.get("id");
            Path<String> nombrePath = root.get("nombre");
            Path<String> claveUnidadPath = root.get("claveUnidad");
         

            criteria.select(
                    builder.construct(ClaveUnidad.class, idPath,claveUnidadPath, nombrePath));
            criteria.where(
                    builder.like(root.get("nombre"), "%" + like + "%")
            );

            resultList = session.createQuery(criteria).getResultList();

            transaction.commit();
            logger.info("Coincidences " + resultList);
        } catch (HibernateException e) {
            logger.error("Economic numbers cannot be loaded " + like, e);
            rollback(transaction);
        } catch (Exception e) {
            logger.error("Method getEconomicNumberLike(" + like + ") ", e);
            rollback(transaction);
        }
        return resultList;
    }
    
    private static final long serialVersionUID = 1020525241432403643L;
    
    final Logger logger = LogManager.getLogger(ClaveUnidadController.class);

    public ClaveUnidadController() {
    }
    
}
