package com.cosmodas.FacadeCosmos;

import com.cosmodas.EntCosmos.InventarioPapeleria;
import com.cosmodas.EntCosmos.InventarioPapeleriaPK;
import com.cosmodas.EntCosmos.Productos;

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

@Stateless
public class InventarioPapeleriaFacade extends AbstractFacade<InventarioPapeleria> implements InventarioPapeleriaFacadeLocal {

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

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

    public InventarioPapeleriaFacade() {
        super(InventarioPapeleria.class);
    }

    //Existencia inventario actual sumando valores.
   @Override
    public void obtenerexistenciasumada(Integer ndatos, String codigoPapeleria, String departamento){
        Query q = em.createNativeQuery("update inventario_papeleria set existencia_actual=? where codigo_papeleria=?  AND departamento = ?");
        q.setParameter(1, ndatos);
        q.setParameter(2, codigoPapeleria);
       q.setParameter(3, departamento);
        q.executeUpdate();
    }

    @Override
    public void obtenerdatosumados(String departamento, String codigoPapeleria, Integer cantidad, Integer tipo){

            Query q = em.createNativeQuery("call procedimientopActualiza(?,?,?,?)", InventarioPapeleria.class);
            q.setParameter(1, "departamento");
            q.setParameter(2, "codigoPapeleria");
            q.setParameter(3, "cantidad");
            q.setParameter(4, "tipo");
            q.executeUpdate();

    }
    @Override
    public List<InventarioPapeleria> listapinventario(){
        Query query = em.createNamedQuery("InventarioPapeleria.findAll");
        return query.getResultList();
    }

    @Override
    public void productoid(String idcodigo){
        try {
            InventarioPapeleriaPK ipk = new InventarioPapeleriaPK();
            InventarioPapeleria ipp = new InventarioPapeleria();
            Query query = em.createNativeQuery("select * from inventario_papeleria where codigo_papeleria = ?");
            query.setParameter(1, idcodigo);
            query.executeUpdate();
        }catch (Exception e) {
            throw  e;
        }
    }

    @Override
    public InventarioPapeleria busquedaCodigo(String procodigoippel){
        InventarioPapeleria rs = new InventarioPapeleria();
        rs = (InventarioPapeleria) em.createNativeQuery("select * from inventario_papeleria where codigo_papeleria = (?) AND departamento = '01'", InventarioPapeleria.class)
                .setParameter(1, procodigoippel).getResultList().get(0);
        return  rs;
    }

    // Buscar codigo y departamento en xml papelriaml
    @Override
    public InventarioPapeleria buscarCodigoyDepartamento(String codigopp, String departamento){
        InventarioPapeleria rs = new InventarioPapeleria();
        Query q = em.createNativeQuery("select * from inventario_papeleria where codigo_papeleria =? AND departamento =?", InventarioPapeleria.class);
        q.setParameter(1,codigopp);
        q.setParameter(2,departamento);
        rs = (InventarioPapeleria) q.getResultList().get(0);
        return  rs;
    }

    @Override
    public void insertarProductoInaventariopp( String codigop, String departamentop, Integer eanterior, Integer eactual, Integer efisica){
        InventarioPapeleria rs = new InventarioPapeleria();
        Query q = em.createNativeQuery("insert into inventario_papeleria (codigo_papeleria, departamento, existencia_anterior, existencia_actual, existencia_fisica) values(?, ?, ?, ?, ?)");
        q.setParameter(1,codigop);
        q.setParameter(2,departamentop);
        q.setParameter(3,eanterior);
        q.setParameter(4,eactual);
        q.setParameter(5,efisica);
        q.executeUpdate();
        //rs = (InventarioPapeleria) q.getResultList().get(0);
        //return  rs;

    }

    @Override
    public List<InventarioPapeleria> ObtenerIDarticulo(String codigopapel){
        List<InventarioPapeleria> listaarticulo = new ArrayList<>();
        Query q = em.createNativeQuery("select * from inventario_papeleria where codigo_papeleria=?", InventarioPapeleria.class);
        q.setParameter(1,codigopapel);
        listaarticulo = q.getResultList();
        return listaarticulo;
    }

    @Override
    public List<InventarioPapeleria> BorrarIDarticulo(String idpapel){
        List<InventarioPapeleria> lart = new ArrayList<>();
        Query q = em.createNativeQuery("delete from articulo_papeleria where codigo_papeleria=?", InventarioPapeleria.class);
        q.setParameter(1,idpapel);
        lart = q.getResultList();
        return  lart;
    }

    @Override
    public List<InventarioPapeleria> ObtenerIdPapelDep(String codigo, String departamento){
        List<InventarioPapeleria> lstInventario = new ArrayList<>();
        Query q = em.createNativeQuery("select codigo_papeleria, departamento, existencia_anterior, existencia_actual, existencia_fisica from inventario_papeleria where codigo_papeleria=? and departamento=?", InventarioPapeleria.class);
        q.setParameter(1,codigo);
        q.setParameter(2,departamento);
        //lstInventario = q.getResultList();
        lstInventario.addAll(q.getResultList());
        return  lstInventario;
    }

    //Obtiene una respuesta 1 si existe el departamento y 0 si esta no existe, luego lo manda y valida.
    @Override
    public boolean obtenerrCodDepPapel(String codigo, String departamento){
        StringBuilder sql = new StringBuilder("select count(codigo_papeleria) as resultado from inventario_papeleria where codigo_papeleria=? and departamento=?");
        Query q = em.createNativeQuery(sql.toString());
        q.setParameter(1, codigo);
        q.setParameter(2, departamento);
        List<Boolean> result = q.getResultList();
        boolean rs = true;
        try {
            rs = result.get(0);
        } catch (Exception e) {
            System.err.println("e");
        }
        return rs;
    }

}
