/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.rjconsultores.ventaboletos.web.gui.controladores.relatorios;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller;
import org.zkoss.util.resource.Labels;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zul.Checkbox;
import org.zkoss.zul.Comboitem;
import org.zkoss.zul.Datebox;
import org.zkoss.zul.Radio;

import com.rjconsultores.ventaboletos.entidad.Empresa;
import com.rjconsultores.ventaboletos.entidad.GrupoRuta;
import com.rjconsultores.ventaboletos.entidad.Ruta;
import com.rjconsultores.ventaboletos.relatorios.impl.RelatorioResumoLinhas;
import com.rjconsultores.ventaboletos.relatorios.impl.RelatorioResumoLinhasAnalitico;
import com.rjconsultores.ventaboletos.relatorios.impl.RelatorioResumoLinhasAnaliticoSimplificadoSumarizado;
import com.rjconsultores.ventaboletos.relatorios.impl.RelatorioResumoLinhasAnaliticoSumarizado;
import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio;
import com.rjconsultores.ventaboletos.service.ConstanteService;
import com.rjconsultores.ventaboletos.service.EmpresaService;
import com.rjconsultores.ventaboletos.service.GrupoRutaService;
import com.rjconsultores.ventaboletos.service.RutaService;
import com.rjconsultores.ventaboletos.utilerias.DateUtil;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxEstandar;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;
import com.rjconsultores.ventaboletos.web.utilerias.spring.AppContext;

/**
 * 
 * @author Administrador
 */
@Controller("relatorioResumoLinhasController")
@Scope("prototype")
public class RelatorioResumoLinhasController extends MyGenericForwardComposer {

	private static final long serialVersionUID = 1L;

	@Autowired
	private DataSource dataSourceRead;
	@Autowired
	private EmpresaService empresaService;
	@Autowired
	private RutaService rutaService;
	@Autowired
	private GrupoRutaService grupoRutaService;

	private List<Ruta> lsRuta;
	private List<Empresa> lsEmpresa;
	private List<GrupoRuta> lsGrupoRuta;

	private Datebox fecCorridaIni;
	private Datebox fecCorridaFin;
	private MyComboboxEstandar cmbRuta;
	private MyComboboxEstandar cmbEmpresa;
	private MyComboboxEstandar cmbGrupoRuta;
	private Radio rdAnalitico;
	private Radio rdSequencia;
	private Checkbox chcSumarizar;
	private Checkbox chcSimplificadoSumarizado;
	private static String CONSTANTE_GRATUIDADE_CRIANCA;



	public void onClick$btnExecutarRelatorio(Event ev) throws Exception {
		executarRelatorio();
	}

	/**
	 * @throws Exception
	 * 
	 */
	@SuppressWarnings({ "rawtypes", "unchecked" })
	private void executarRelatorio() throws Exception {

		Relatorio relatorio;
		Map<String, Object> parametros = new HashMap<String, Object>();
		StringBuilder filtro = new StringBuilder();

		parametros.put("DATA_INICIAL", this.fecCorridaIni.getValue());
		parametros.put("DATA_FINAL", DateUtil.fimFecha(this.fecCorridaFin.getValue()));
		parametros.put("NOME_RELATORIO", Labels.getLabel("relatorioResumoLinhasController.window.title"));
		parametros.put("USUARIO", UsuarioLogado.getUsuarioLogado().getUsuarioId().toString());
		parametros.put("NOME_USUARIO", UsuarioLogado.getUsuarioLogado().getNombusuario());
		parametros.put("CRIANCA_ID", buscarConstante("GRATUIDADE_CRIANCA"));

		Comboitem itemRuta = cmbRuta.getSelectedItem();

		filtro.append("Linha: ");
		if (itemRuta != null) {
			Ruta ruta = (Ruta) itemRuta.getValue();
			parametros.put("RUTA_ID", ruta.getRutaId());
			filtro.append(ruta.getDescruta() + ";");
		}
		else
			filtro.append("Todas;");

		Comboitem itemGrupoRuta = cmbGrupoRuta.getSelectedItem();

		filtro.append("Grupo de Linha: ");
		if (itemGrupoRuta != null) {
			GrupoRuta grupoRuta = (GrupoRuta) itemGrupoRuta.getValue();
			parametros.put("GRUPORUTA_ID", grupoRuta.getGrupoRutaId());
			filtro.append(grupoRuta.getDescGrupo());
		}
		else
			filtro.append("Todos;");

		Comboitem itemEmpresa = cmbEmpresa.getSelectedItem();
		if (itemEmpresa != null) {
			Empresa empresa = (Empresa) itemEmpresa.getValue();
			parametros.put("EMPRESA_ID", empresa.getEmpresaId());
			parametros.put("EMPRESA", empresa.getNombempresa());
			filtro.append(" EMPRESA: " + empresa.getNombempresa());
		}

		SimpleDateFormat df = new SimpleDateFormat("dd/MM/yyyy");
		filtro.append(" DATA: " + df.format(new Date()));
		parametros.put("DATA", new Date());
		parametros.put("SOMAR_KM_RODADOS_POR", rdSequencia.isChecked() ? "SEQUENCIA" : "COMBINACAO");
		   	 
		
		parametros.put("FILTROS", filtro.toString());

		String tituloRelatorio = "relatorioResumoLinhasController.window.title";
		if (rdAnalitico.isChecked()) {
			if(chcSumarizar.isChecked()) {
				relatorio = new RelatorioResumoLinhasAnaliticoSumarizado(parametros, dataSourceRead.getConnection());
				tituloRelatorio = "relatorioResumoLinhasAnaliticoSumarizadoCompletoController.window.title";
			}else if(chcSimplificadoSumarizado.isChecked()){
				relatorio = new RelatorioResumoLinhasAnaliticoSimplificadoSumarizado(parametros, dataSourceRead.getConnection());
				tituloRelatorio = "relatorioResumoLinhasAnaliticoSumarizadoSimplificadoController.window.title";
			}else {
				relatorio = new RelatorioResumoLinhasAnalitico(parametros, dataSourceRead.getConnection());
			}
		}else {
			relatorio = new RelatorioResumoLinhas(parametros, dataSourceRead.getConnection());
		}
		Map args = new HashMap();
		args.put("relatorio", relatorio);

		openWindow("/component/reportView.zul",
				Labels.getLabel(tituloRelatorio), args, MODAL); 

	}

	@Override
	public void doAfterCompose(Component comp) throws Exception {
		setLsRuta(rutaService.obtenerTodos());
		lsEmpresa = empresaService.obtenerTodos();
		lsGrupoRuta = grupoRutaService.obtenerTodos();

		super.doAfterCompose(comp);
	}
	
	private String buscarConstante(String nomeConstante) {
		ConstanteService constanteService = (ConstanteService) AppContext.getApplicationContext().getBean("constanteService");
		return constanteService.buscarPorNomeConstante(nomeConstante).getValorconstante();
	}

	public List<Ruta> getLsRuta() {
		return lsRuta;
	}

	public void setLsRuta(List<Ruta> lsRuta) {
		this.lsRuta = lsRuta;
	}

	public MyComboboxEstandar getCmbRuta() {
		return cmbRuta;
	}

	public void setCmbRuta(MyComboboxEstandar cmbRuta) {
		this.cmbRuta = cmbRuta;
	}

	public List<Empresa> getLsEmpresa() {
		return lsEmpresa;
	}

	public void setLsEmpresa(List<Empresa> lsEmpresa) {
		this.lsEmpresa = lsEmpresa;
	}

	public List<GrupoRuta> getLsGrupoRuta() {
		return lsGrupoRuta;
	}

	public void setLsGrupoRuta(List<GrupoRuta> lsGrupoRuta) {
		this.lsGrupoRuta = lsGrupoRuta;
	}
	
	public Checkbox getChcSimplificadoSumarizado() {
		return chcSimplificadoSumarizado;
	}

	public void setChcSimplificadoSumarizado(Checkbox chcSimplificadoSumarizado) {
		this.chcSimplificadoSumarizado = chcSimplificadoSumarizado;
	}

}
