/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.rjconsultores.ventaboletos.dao.hibernate;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Date;
import java.util.Map;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.stereotype.Repository;

import com.rjconsultores.ventaboletos.dao.InformePasajeroServicioDAO;
import com.rjconsultores.ventaboletos.entidad.Empresa;
import com.rjconsultores.ventaboletos.entidad.Marca;

/**
 *
 * @author Administrador
 */
@Repository("informePasajeroServicioDAO")
public class InformePasajeroServicioDAOImpl implements InformePasajeroServicioDAO {

    private static final Logger log = LogManager.getLogger(InformePasajeroServicioDAOImpl.class);

    private String getSql(Empresa empresa, Marca marca, Integer numServicio,
            Date dataInicio, Date dataFinal) {

        StringBuilder sql = new StringBuilder();
        sql.append(" SELECT nombpasajero, feccorrida, corrida_id, boleto_id, preciopagado, ");
        sql.append("        cs.descclase, pao.descparada origen, pad.descparada destino, ");
        sql.append("        fechorventa, pv.nombpuntoventa, ma.descmarca, bo.usuario_id, ");
        sql.append("        em.nombempresa ");
        sql.append(" FROM   boleto bo ");
        sql.append("        INNER JOIN parada pao ON pao.parada_id = bo.origen_id ");
        sql.append("        INNER JOIN parada pad ON pad.parada_id = bo.destino_id ");
        sql.append("        INNER JOIN clase_servicio cs ON cs.claseservicio_id = bo.claseservicio_id ");
        sql.append("        INNER JOIN punto_venta pv ON pv.puntoventa_id = bo.puntoventa_id ");
        sql.append("        INNER JOIN marca ma on ma.marca_id = bo.marca_id ");
        sql.append("        INNER JOIN empresa em ON em.empresa_id = bo.empresacorrida_id");
        sql.append(" WHERE 1=1 ");

        if (empresa != null) {
            sql.append(" AND bo.empresacorrida_id = ").append(empresa.getEmpresaId());
        }

        if (marca != null) {
            sql.append(" AND bo.marca_id = ").append(marca.getMarcaId());
        }

        if (numServicio != null) {
            sql.append(" AND corrida_id = ").append(numServicio);
        }

        if (dataInicio != null) {
            sql.append(" AND bo.fechorventa >= ? ");
        }

        if (dataFinal != null) {
            sql.append(" AND bo.fechorventa <= ? ");
        }

        return sql.toString();
    }

    public ResultSet executarSQL(Connection conn, Map parameters) {
        Empresa empresa = (Empresa) parameters.get("empresa");
        Marca marca = (Marca) parameters.get("marca");
        Integer numServicio = (Integer) parameters.get("numServicio");
        Date dataInicio = (Date) parameters.get("dataInicio");
        Date dataFinal = (Date) parameters.get("dataFinal");

        String sql = getSql(empresa, marca, numServicio, dataInicio, dataFinal);
        PreparedStatement stmt = null;
        ResultSet rset = null;

        try {
            stmt = conn.prepareStatement(sql);
            stmt.setDate(1, new java.sql.Date(dataInicio.getTime()));
            stmt.setDate(2, new java.sql.Date(dataFinal.getTime()));
            rset = stmt.executeQuery();
        } catch (Exception ex) {
            log.error(ex);
        }

        return rset;
    }
}
