package com.rjconsultores.ventaboletos.relatorios.impl;

import java.sql.Connection;
import java.sql.ResultSet;
import java.text.SimpleDateFormat;
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.RelatorioEmpresaOnibusBean;
import com.rjconsultores.ventaboletos.web.utilerias.NamedParameterStatement;

public class RelatorioEmpresaOnibusResumo extends Relatorio {

	private List<RelatorioEmpresaOnibusBean> lsDadosRelatorio;
	
	public RelatorioEmpresaOnibusResumo(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 fecInicio = parametros.get("fecInicio").toString() + " 00:00:00";
				String fecFinal = parametros.get("fecFinal").toString() + " 23:59:59";
				String empresa = parametros.get("empresa") != null ? parametros.get("empresa").toString() : "";
				String autobus = parametros.get("autobus") != null ? parametros.get("autobus").toString() : "";
				
				String sql = getSql(empresa, autobus);
		
				System.out.println(sql);
		
				SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss");
				NamedParameterStatement stmt = new NamedParameterStatement(conexao, sql);
				stmt.setTimestamp("fecInicio", new java.sql.Timestamp(sdf.parse(fecInicio).getTime()));
				stmt.setTimestamp("fecFinal", new java.sql.Timestamp(sdf.parse(fecFinal).getTime()));
				if (empresa != null && !empresa.equals("")){
					stmt.setInt("empresa_id", Integer.parseInt(empresa));
				}
				if (autobus != null && !autobus.equals("")){
					stmt.setInt("autobus_id", Integer.parseInt(autobus));
				}
				
				ResultSet rset = null;
		
				rset = stmt.executeQuery();
		
				lsDadosRelatorio = new ArrayList<RelatorioEmpresaOnibusBean>();
				
				while (rset.next()) {
					RelatorioEmpresaOnibusBean empresaOnibusBean = new RelatorioEmpresaOnibusBean();
					//empresaOnibusBean.setCorridaId(rset.getInt("corridaId"));
					empresaOnibusBean.setEmpresa(rset.getString("empresa"));
					empresaOnibusBean.setCoche(Integer.parseInt(rset.getString("coche")));
					//empresaOnibusBean.setDestino(rset.getString("destino"));
					//empresaOnibusBean.setDia(rset.getDate("dia"));
					//empresaOnibusBean.setHora(rset.getString("hora"));
					empresaOnibusBean.setKmts(rset.getInt("kmts"));
					//empresaOnibusBean.setOrigem(rset.getString("origem"));
					
					lsDadosRelatorio.add(empresaOnibusBean);
				}
				
				if (lsDadosRelatorio.size() > 0) {
					setLsDadosRelatorio(lsDadosRelatorio);
				}
			}
		});
	}
	
	public void setLsDadosRelatorio(List<RelatorioEmpresaOnibusBean> lsDadosRelatorio) {
		this.setCollectionDataSource(new JRBeanCollectionDataSource(lsDadosRelatorio));
		this.lsDadosRelatorio = lsDadosRelatorio;
	}

	@Override
	protected void processaParametros() throws Exception {
	}
	
	private String getSql(String empresa, String autobus) {
		StringBuffer sql = new StringBuffer();
		sql.append("SELECT e.nombempresa     empresa, ");
		sql.append("       a.numautobus      coche, ");
		sql.append("       Sum(t.cantkmreal) KMTS ");
		sql.append("FROM   corrida c, ");
		sql.append("       corrida_tramo ct, ");
		sql.append("       tramo t, ");
		sql.append("       autobus a, ");
		sql.append("       empresa e, ");
		sql.append("       parada o, ");
		sql.append("       parada d ");
		sql.append("WHERE  c.activo = 1 ");
		sql.append("       AND ct.corrida_id = c.corrida_id ");
		sql.append("       AND c.feccorrida = ct.feccorrida ");
		sql.append("       AND t.tramo_id = ct.tramo_id ");
		sql.append("       AND ct.activo = 1 ");
		sql.append("       AND c.feccorrida BETWEEN  :fecInicio and :fecFinal ");
		sql.append("       AND a.autobus_id = ct.autobus_id ");
		sql.append("       AND e.empresa_id = a.empresa_id ");
		sql.append("       AND o.parada_id = ct.origen_id ");
		sql.append("       AND d.parada_id = ct.destino_id ");
		if (!empresa.isEmpty()){
			sql.append("       AND e.empresa_id = :empresa_id  ");
		}
		if (!autobus.isEmpty()){
			sql.append("       AND a.autobus_id = :autobus_id  ");
		}
		sql.append("GROUP  BY e.nombempresa, ");
		sql.append("          a.numautobus ");
		sql.append("ORDER  BY e.nombempresa, ");
		sql.append("          a.numautobus ");
		
		return sql.toString();
	}
}
