/*
 * 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.
 */
package com.cosmodas.FacadeCosmos;

import com.cosmodas.EntCosmos.*;

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

/**
 * @author obper
 */
@Stateless
public class SucursalesFacade extends AbstractFacade<Sucursales> implements SucursalesFacadeLocal {
    @PersistenceContext(unitName = "wcosmodasPersistent")
    private EntityManager em;

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

    public SucursalesFacade() {
        super(Sucursales.class);
    }


    @Override
    public String get_sucursal_nombre(String sucursalCodigo) {
        Query consulta = em.createNamedQuery("Sucursales.findBySucursalCodigo");
        consulta.setParameter("sucursalCodigo", sucursalCodigo);
        try {
            return consulta.getSingleResult().toString();
        } catch (Exception e) {
            return null;
        }
    }

    @Override
    public List<Sucursales> listaPorSucursalDescarga(String sucursalDescargaCodigo) {
        Query q = em.createNamedQuery("Sucursales.findBySucursalDescarga");
        q.setParameter("sucursalDescarga", sucursalDescargaCodigo);
        return q.getResultList();
    }


    @Override
    public Sucursales getSucursal(String terminal) {
        Query q = em.createQuery("SELECT s FROM Sucursales s WHERE s.terminal = :terminal");
        q.setParameter("terminal", terminal);
        Sucursales sucursal = (Sucursales) q.getSingleResult();
        return sucursal;
    }

    @Override
    public List<Sucursales> listSalas() {
//        Query q = em.createQuery("SELECT s.terminal FROM Sucursales s");
//        List list = q.getResultList();
        return em.createNamedQuery("Sucursales.findAll").getResultList();
    }

    @Override
    public List<Sucursales> sucursalesActivas(){

        Query q = em.createNativeQuery("Select * from sucursales where sala_fax = 1", Sucursales.class);
        List<Sucursales> rs = new ArrayList<>();
        rs.addAll(q.getResultList());

        return rs;

    }

    @Override
    public Consultores findConsultor(String consultorCodigo) {
        Consultores rs = new Consultores();
        if (!consultorCodigo.isEmpty()) {
            System.out.println("consultor has el facade " + consultorCodigo);
            Query q = em.createNamedQuery("Consultores.findByConsultorCodigo");
            q.setParameter("consultorCodigo", consultorCodigo);
            rs = (Consultores) q.getResultList().get(0);
            System.out.println("consultor despues del facade " + consultorCodigo);
        }
        rs.getCargosCollection().size();
        return rs;
    }

    @Override
    public Documentos findDocumentos(String documentoCodigo) {
        Query q = em.createNamedQuery("Documentos.findByDocumentoCodigo");
        q.setParameter("documentoCodigo", documentoCodigo);
        Documentos rs = (Documentos) q.getSingleResult();
        return rs;
    }

    @Override
    public List<proPremios> findCallProPremios(String consultorCodigo, String programaCodigo, String fechaInicial, String fechaFinal) {

        Query q = em.createNativeQuery("CALL PRO_PREMIOS(?,?,?,?)", proPremios.class);
                q.setParameter(1, consultorCodigo);
        q.setParameter(2, programaCodigo);
        q.setParameter(3, fechaInicial);
        q.setParameter(4, fechaFinal);

        List<proPremios> rs = new ArrayList<>();
        rs.addAll(q.getResultList());
        return rs;
    }

    @Override
    public Integer ExistenciasProducto2(String productoCodigo, String sucursalCodigo) {
        Integer rs = 0;

        StringBuilder sql = new StringBuilder("Select existencia_por_sala(?,?)");
        Query q = em.createNativeQuery(sql.toString());
        q.setParameter(1, productoCodigo);
        q.setParameter(2, sucursalCodigo);

        List<Integer> dx = q.getResultList();
        rs = dx.get(0);
        return rs;
    }


    @Override
    public List<proKardex> findCallKardex(String consultorCodigo, Date fechaInicial, Date fechaFinal) {

        List<proKardex> rs = new ArrayList<>();
        Query q = em.createNativeQuery("CALL PRO_kardex(?,?,?,?)", proKardex.class);
        q.setParameter(1,"M");
        q.setParameter(2,consultorCodigo);
        q.setParameter(3,fechaInicial);
        q.setParameter(4,fechaFinal);

        rs.addAll(q.getResultList());

        return rs;
    }

    @Override
    public Productos getProducto(String productoCodigo) {
        return em.find(Productos.class, productoCodigo);
    }


    @Override
    public Facturas buskedaFact(FacturasPK facturaCodigo) {
        return em.find(Facturas.class, facturaCodigo);
    }


    @Override
    public boolean ExistenciasProductoFino(String productoCodigo, String ofertaCodigo, String sucursalCodigo, Integer cantidad) {
        boolean rs = false;

        StringBuilder sql = new StringBuilder("Select valida_existencia_facturas(?,?,?,?)");
        Query q = em.createNativeQuery(sql.toString());
        q.setParameter(1, productoCodigo);
        q.setParameter(2, ofertaCodigo);
        q.setParameter(3, sucursalCodigo);
        q.setParameter(4, cantidad);

        List<Integer> dx = q.getResultList();
        rs = dx.get(0) == 1 ? true : false;
        return rs;
    }

    @Override
    public List<VventasSalas> ventasSalas(){
        Query q = em.createNamedQuery("VventasSalas.AllSalas");
        return q.getResultList();
    }

}
