/*
 * 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.VprecioProgramaF;

import java.util.ArrayList;
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 VprecioProgramaFFacade extends AbstractFacade<VprecioProgramaF> implements VprecioProgramaFFacadeLocal {

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

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

    public VprecioProgramaFFacade() {
        super(VprecioProgramaF.class);
    }

    @Override
    public List<VprecioProgramaF> obtenerProductoPorCodigo(String productoCodigo, String programaCodigo) {
        Query q = em.createNamedQuery("VprecioProgramaF.findByProductoCodigoAndProgramaCodigo");
        q.setParameter("productoCodigo", productoCodigo);
        q.setParameter("programaCodigo", programaCodigo);

        if (!q.getResultList().isEmpty()) {
            return q.getResultList();
        } else {

            return new ArrayList<>();
        }

    }

    @Override
    public List<VprecioProgramaF> obtenerProductoPorCodigoPedido(String productoCodigo, String programaCodigo) {
        Query q = em.createNamedQuery("VprecioProgramaF.findByProductoCodigoAndProgramaCodigoPedido");
        q.setParameter("productoCodigo", productoCodigo);
        q.setParameter("programaCodigo", programaCodigo);

        if (!q.getResultList().isEmpty()) {
            return q.getResultList();
        } else {

            return new ArrayList<>();
        }

    }

    @Override
    public List<VprecioProgramaF> obtenerProductoLikeNombre(String nombreProducto, String programaCodigo) {
        Query q = em.createNamedQuery("VprecioProgramaF.findByProductoNombreCodigoAndProgramaCodigo");
        q.setParameter("productoNombre", "%" + nombreProducto + "%");
        q.setParameter("programaCodigo", programaCodigo);

        if (!q.getResultList().isEmpty()) {
            return q.getResultList();
        } else {

            return new ArrayList<>();
        }

    }

    @Override
    public List<VprecioProgramaF> obtenerProductoLikeNombrePedido(String nombreProducto, String programaCodigo) {
        Query q = em.createNamedQuery("VprecioProgramaF.findByProductoNombreCodigoAndProgramaCodigoPedido");
        q.setParameter("productoNombre", "%" + nombreProducto + "%");
        q.setParameter("programaCodigo", programaCodigo);

        if (!q.getResultList().isEmpty()) {
            return q.getResultList();
        } else {

            return new ArrayList<>();
        }

    }

    @Override
    public VprecioProgramaF obtenerProductoCodigoAndOferta(String productoCodigo, String programaCodigo, String ofertaCodigo) {
        VprecioProgramaF rs = new VprecioProgramaF();

    //    Query q = em.createNamedQuery("VprecioProgramaF.findByProductoCodigoAndProgramaCodigoAndOferta");
        Query q = em.createNativeQuery("call precio_programa_f2(?,?,?)", VprecioProgramaF.class);

        q.setParameter(1, productoCodigo);
        q.setParameter(3, programaCodigo);
        q.setParameter(2, ofertaCodigo);

        if (!q.getResultList().isEmpty()) {
            rs = (VprecioProgramaF) q.getResultList().get(0);
        } else {
        }

        return rs;

    }


    @Override
    public VprecioProgramaF obtenerProductoCodigo(String productoCodigo, String programaCodigo) {
        VprecioProgramaF rs = new VprecioProgramaF();

        Query q = em.createNamedQuery("VprecioProgramaF.findByProductoCodigoAndProgramaCodigo");
        q.setParameter("productoCodigo", productoCodigo);
        q.setParameter("programaCodigo", programaCodigo);

        if (!q.getResultList().isEmpty()) {
            rs = (VprecioProgramaF) q.getResultList().get(0);
        } else {
        }

        return rs;

    }

    @Override
    public VprecioProgramaF obtenerProductoPrm(String productoCodigo) {
        VprecioProgramaF rs = new VprecioProgramaF();

        Query q = em.createNamedQuery("VprecioProgramaF.findByProductoCodigo");
        q.setParameter("productoCodigo", productoCodigo);

        if (!q.getResultList().isEmpty()) {
            rs = (VprecioProgramaF) q.getResultList().get(0);
        } else {
        }

        return rs;

    }

    @Override
    public List<VprecioProgramaF> ProductoParaFacturta(String productoCodigo, String tipoIngreso, String programaCodigo) {
        List<VprecioProgramaF> rs = new ArrayList<>();
        StringBuilder query = new StringBuilder("call precio_programa_f(?,?,?)");

        Query q = em.createNativeQuery(query.toString(), VprecioProgramaF.class);
        q.setParameter(1, productoCodigo);
        q.setParameter(2, tipoIngreso);
        q.setParameter(3, programaCodigo);

        rs = q.getResultList();

        return rs;
    }


    @Override
    public List<VprecioProgramaF> OfertaParaFacturta(String productoCodigo, String programaCodigo) {
        List<VprecioProgramaF> rs = new ArrayList<>();
        StringBuilder query = new StringBuilder("call precio_programa_ofer(?,?)");

        Query q = em.createNativeQuery(query.toString(), VprecioProgramaF.class);
        q.setParameter(1, productoCodigo);
        q.setParameter(2, programaCodigo);

        rs = q.getResultList();

        return rs;
    }


}
