package com.rjconsultores.ventaboletos.relatorios.impl;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
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.RelatorioAgenciasNaoImportadasBean;

public class RelatorioAgenciasNaoImportadas extends Relatorio {

	private List<RelatorioAgenciasNaoImportadasBean> lsDadosRelatorio;
	
	public RelatorioAgenciasNaoImportadas(Map<String, Object> parametros, Connection conexao){
		super(parametros, conexao);

		try{
			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 empresas = getEmpresas(conexao);
					String sql = getSQL(empresas);
	
					PreparedStatement stmt = conexao.prepareStatement(sql);
					ResultSet rs = null;
					SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy hh:mm:ss");
					
					stmt.setTimestamp(1, new java.sql.Timestamp(sdf.parse(fecInicio).getTime()));
					stmt.setTimestamp(2, new java.sql.Timestamp(sdf.parse(fecFinal).getTime()));
	
					rs = stmt.executeQuery();
	
					lsDadosRelatorio = new ArrayList<RelatorioAgenciasNaoImportadasBean>();
					
					while (rs.next()) {
	
						RelatorioAgenciasNaoImportadasBean agencia = new RelatorioAgenciasNaoImportadasBean();
						
						agencia.setNumpuntoventa(rs.getString(1));
						agencia.setNombpuntoventa(rs.getString(2));
						agencia.setFecha(rs.getDate(3));
						
						lsDadosRelatorio.add(agencia);
					}
					
					if (lsDadosRelatorio.size() > 0) {
	
						setLsDadosRelatorio(lsDadosRelatorio);
					}
				}
			});
		} catch (Exception e){
			System.out.println(e.toString());
		}
	}

	public void setLsDadosRelatorio(List<RelatorioAgenciasNaoImportadasBean> lsDadosRelatorio) {
		this.setCollectionDataSource(new JRBeanCollectionDataSource(lsDadosRelatorio));
		this.lsDadosRelatorio = lsDadosRelatorio;
	}

	@Override
	protected void processaParametros() throws Exception {
	}

	private String getEmpresas(Connection conexao){
		String sql = "select valorconstante from constante where nombconstante = 'EMPRESAS_INTEGRACAO'";
		try{
			PreparedStatement stmt = conexao.prepareStatement(sql);
			ResultSet rs = stmt.executeQuery();
			if (rs.next()){
				return rs.getString(1);
			} else {
				return "";
			}
		} catch (Exception e){
			System.out.println(e.toString());
			return "";
		}
	}
	private String getSQL(String empresas) {

		// Custo da query: 40
		StringBuilder sql = new StringBuilder();
		sql.append(" select distinct p.numpuntoventa, p.nombpuntoventa, t.feccorte  ");
		sql.append(" from punto_venta p  ");
		sql.append(" inner join titulo_integracion t on t.puntoventa_id = p.puntoventa_id ");
		sql.append(" where t.feccorte between ? AND ? and t.fecintegracion is null ");
		sql.append(" order by  t.feccorte, p.nombpuntoventa ");

		return sql.toString();
	}
}
