package com.rjconsultores.ventaboletos.relatorios.impl;

import java.sql.Connection;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

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

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

public class RelatorioGratuidadeIdosoDeficiente  extends Relatorio {

	private List<RelatorioGratuidadeIdosoDeficienteBean> lsDadosRelatorio;
	
	public RelatorioGratuidadeIdosoDeficiente(Map<String, Object> parametros, Connection conexao)  throws Exception {
		super(parametros, conexao);
		
		this.setCustomDataSource(new DataSource(this) {
			@Override
			public void initDados() throws Exception {

				Connection conexao = this.relatorio.getConexao();

				Map<String, Object> parametros = this.relatorio.getParametros();

				String fecha = parametros.get("fecha").toString();
				String categoriaId = parametros.get("categoria") != null ? parametros.get("categoria").toString() : "";
				String empresaId = parametros.get("empresa") != null ? parametros.get("empresa").toString() : "";
				
				String sql = getSql(categoriaId, fecha, empresaId);
		
				System.out.println(sql);

				NamedParameterStatement stmt = new NamedParameterStatement(conexao, sql);
				stmt.setString("fecha", fecha);
				if (categoriaId != null && !categoriaId.equals("")){
					stmt.setString("categoriaId", categoriaId);
				}
				if (empresaId != null && !empresaId.equals("")){
					stmt.setString("empresaId", empresaId);
				}
				ResultSet rset = null;
		
				rset = stmt.executeQuery();
		
				lsDadosRelatorio = new ArrayList<RelatorioGratuidadeIdosoDeficienteBean>();
				
				while (rset.next()) {
					RelatorioGratuidadeIdosoDeficienteBean gratuidadeBean = new RelatorioGratuidadeIdosoDeficienteBean();
					gratuidadeBean.setDescnumdoc(rset.getString(4));
					gratuidadeBean.setDescorgaodoc(rset.getString(2));
					gratuidadeBean.setDesctipodoc(rset.getString(3));
					gratuidadeBean.setDestino(rset.getString(8));
					gratuidadeBean.setFeccorrida(rset.getDate(6));
					gratuidadeBean.setNombpasajero(rset.getString(1));
					gratuidadeBean.setNumfoliosistema(rset.getString(5));
					gratuidadeBean.setOrigen(rset.getString(7));
					gratuidadeBean.setPrecio(rset.getBigDecimal(9));
					lsDadosRelatorio.add(gratuidadeBean);
				}
				
				if (lsDadosRelatorio.size() > 0) {
					setLsDadosRelatorio(lsDadosRelatorio);
				}
			}
		});
	}
	
	public void setLsDadosRelatorio(List<RelatorioGratuidadeIdosoDeficienteBean> lsDadosRelatorio) {
		this.setCollectionDataSource(new JRBeanCollectionDataSource(lsDadosRelatorio));
		this.lsDadosRelatorio = lsDadosRelatorio;
	}

	@Override
	protected void processaParametros() throws Exception {
	}
	
	private String getSql(String categoriaId, String fecha, String empresaId) {
		StringBuffer sql = new StringBuffer();
		sql.append("select distinct ");
		sql.append("  b.nombpasajero,  ");
		sql.append("  b.descorgaodoc, "); 
		sql.append("  b.desctipodoc, "); 
		sql.append("  b.descnumdoc, ");
		sql.append("  b.numfoliosistema, "); 
		sql.append("  b.feccorrida,  ");
		sql.append("  o.descparada,  ");
		sql.append("  d.descparada,  ");
		sql.append("  t.precio  ");
		sql.append("from  ");
		sql.append("    boleto b ");
		sql.append("    join categoria c on c.categoria_id = b.categoria_id ");
		sql.append("    join parada o on o.parada_id = b.origen_id ");
		sql.append("    join parada d on d.parada_id = b.destino_id ");
		sql.append("    join tarifa t on t.origen_id = b.origen_id  ");
		sql.append("        and t.destino_id = b.destino_id  ");
		sql.append("        and t.ruta_id = b.ruta_id  ");
		sql.append("        and t.claseservicio_id = b.claseservicio_id ");
		sql.append("        and t.marca_id = b.marca_id ");
		sql.append("    join vigencia_tarifa vt on vt.vigenciatarifa_id = t.vigenciatarifa_id "); 
		sql.append("        and b.fechorviaje between vt.feciniciovigencia and vt.fecfinvigencia ");
		sql.append("    join marca m on m.marca_id = b.marca_id ");
		sql.append("    join empresa e on e.empresa_id = m.empresa_id ");
		sql.append("where  ");
		if (!categoriaId.isEmpty()){
			sql.append(" c.categoria_id = :categoriaId ");
		}
		if (!empresaId.isEmpty()){
			sql.append(" and e.empresa_id = :empresaId ");
		}
		if (!fecha.isEmpty()){
			sql.append("AND to_char(b.feccorrida, 'MM/YYYY') = :fecha  ");
		}
		sql.append("    and b.motivocancelacion_id is null  ");
		sql.append("    and b.activo <> 0 ");
		sql.append("order by b.feccorrida, b.nombpasajero");
		
		return sql.toString();
	}
}
