package com.rjconsultores.ventaboletos.relatorios.impl;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;

import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio;
import com.rjconsultores.ventaboletos.relatorios.utilitarios.RelatorioBaixasVendasInternetSinteticoBean;
import com.rjconsultores.ventaboletos.web.utilerias.NamedParameterStatement;

import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;

public class RelatorioBaixasVendasInternetSintetico extends Relatorio {

	private Date fecInicio;
	private Date fecFinal;

	public RelatorioBaixasVendasInternetSintetico(Connection conexao, Date fecInicio, Date fecFinal) {
		super(new HashMap<String, Object>(), conexao);
		this.fecInicio = fecInicio;
		this.fecFinal = fecFinal;
	}

	@Override
	protected void processaParametros() throws Exception {

		NamedParameterStatement namedParameterStatement = new NamedParameterStatement(getConexao(), getSql());

		SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
		this.parametros.put("fecInicio", dateFormat.format(fecInicio));
		this.parametros.put("fecFinal", dateFormat.format(fecFinal));
		namedParameterStatement.setDate("fecInicio", new java.sql.Date(fecInicio.getTime()));
		namedParameterStatement.setDate("fecFinal", new java.sql.Date(fecFinal.getTime()));

		ResultSet resultSet = namedParameterStatement.executeQuery();
		List<RelatorioBaixasVendasInternetSinteticoBean> resultBean = transformResultSet(resultSet);
		setCollectionDataSource(new JRBeanCollectionDataSource(resultBean));

	}

	private List<RelatorioBaixasVendasInternetSinteticoBean> transformResultSet(ResultSet resultSet) throws SQLException {
		List<RelatorioBaixasVendasInternetSinteticoBean> resultBean = new ArrayList<RelatorioBaixasVendasInternetSinteticoBean>();
		while (resultSet.next()) {
			RelatorioBaixasVendasInternetSinteticoBean bean = new RelatorioBaixasVendasInternetSinteticoBean();
			bean.setPuntoventaId(resultSet.getInt("PUNTOVENTA_ID"));
			bean.setQtdPassagens(resultSet.getInt("QTD_PASSAGENS"));
			bean.setNombPuntoventa(resultSet.getString("NOMBPUNTOVENTA"));
			bean.setValor(resultSet.getBigDecimal("VALOR"));
			bean.setValorPago(resultSet.getBigDecimal("VALOR_PAGO"));
			resultBean.add(bean);
		}
		return resultBean;
	}

	private String getSql() {

		String sql = "";

		sql = "SELECT DISTINCT B.PUNTOVENTA_ID, PV.NOMBPUNTOVENTA, "
				+ "COUNT(*) as QTD_PASSAGENS, "
				+ "SUM(B.PRECIOPAGADO) AS VALOR_PAGO, "
				+ "SUM(COALESCE((COALESCE(B.PRECIOPAGADO, 0) + COALESCE(B.IMPORTETAXAEMBARQUE, 0) + COALESCE(B.IMPORTESEGURO, 0) + COALESCE(B.IMPORTEPEDAGIO, 0) + COALESCE(B.IMPORTEOUTROS, 0)), 0)) AS VALOR "
				+ "FROM BOLETO B "
				+ "JOIN PARADA O "
				+ "ON B.ORIGEN_ID = O.PARADA_ID "
				+ "JOIN PARADA D " 
				+ "ON B.DESTINO_ID = D.PARADA_ID " 
				+ "JOIN USUARIO U "
				+ "ON B.USUARIO_ID = U.USUARIO_ID "
				+ "JOIN PUNTO_VENTA PV "
				+ "ON B.PUNTOVENTA_ID = PV.PUNTOVENTA_ID "
				+ "WHERE B.INDSTATUSBOLETO = 'E' "
				+ "AND B.FECCREACION BETWEEN :fecInicio AND :fecFinal "
				+ "GROUP BY B.PUNTOVENTA_ID, PV.NOMBPUNTOVENTA ";

		return sql;

	}

}