package com.contabilidad.FacadeConta;

import com.contabilidad.EntConta.MarcacionesFace;
import com.contabilidad.EntConta.Personal;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

@Stateless
public class PersonalFacade extends AbstractFacade<Personal> implements PersonalFacadeLocal {

    @PersistenceContext(unitName = "contabilidad")
    private EntityManager em;

    @Override
    protected EntityManager getEntityManager() {
        return em;
    }

    public PersonalFacade() {
        super(Personal.class);
    }


    @Override
    public  String obtenerNuevoCodigoEmp(String letraApellido){
        StringBuilder out = new StringBuilder("select nuevo_empleado_cod(?)");
        Query q = em.createNativeQuery(out.toString());
        q.setParameter(1,letraApellido);

        return (String) q.getResultList().get(0);

    }

    @Override
    public String obtenernamedepart(String dep){
        String rs = "NOG";
        //fboleta_duplicada //select nombre_departamento from departamentos where codigo_departamento  = ?
        Query q = em.createNativeQuery("select nombre_departamento from departamentos where codigo_departamento  = ?", String.class);
        q.setParameter(1, dep);
        rs = (String) q.getResultList().get(0);

        return rs;

    }

    @Override
    public List<Personal> listNombreLike(String query){
        Query q = em.createNativeQuery("SELECT * from personal where nombre_empleado like ? ", Personal.class);
        q.setParameter(1, "%"+query+"%");
        List<Personal> rs = new ArrayList<>();
        rs.addAll(q.getResultList());
        return rs;

    }

    @Override
    public Personal empleadoPorCodigo(String codigoEmpleado){
        Query q = em.createNativeQuery("SELECT * from personal where codigo_empleado = ? ", Personal.class);
        q.setParameter(1, codigoEmpleado);
        List<Personal> rs = new ArrayList<>();
        rs.addAll(q.getResultList());
        return rs.get(0);

    }

    @Override
    public List<Personal> empleadosActivos(){
        Query q = em.createNativeQuery("SELECT * from personal where inactivo = 0 ", Personal.class);
        List<Personal> rs = new ArrayList<>();
        rs.addAll(q.getResultList());
        return rs;

    }

 @Override
 public MarcacionesFace marcacionesEmpleado(String codigoEmpleado, Date fecha){

        Query q = em.createNativeQuery("call ficha_hora_empleado(?, ?)", MarcacionesFace.class);
        q.setParameter(1, codigoEmpleado);
        q.setParameter(2, fecha);
        List<MarcacionesFace> rs = new ArrayList<>();
        rs.addAll(q.getResultList());
        return rs.get(0);

    }


}
