package com.rjconsultores.ventaboletos.web.gui.controladores.relatorios;

import java.sql.SQLException;
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.Combobox;
import org.zkoss.zul.Comboitem;
import org.zkoss.zul.Datebox;

import com.rjconsultores.ventaboletos.entidad.Empresa;
import com.rjconsultores.ventaboletos.entidad.Ruta;
import com.rjconsultores.ventaboletos.relatorios.impl.RelatorioQuadroDemonstrativoMovimentoPassageiros;
import com.rjconsultores.ventaboletos.relatorios.impl.RelatorioQuadroDemonstrativoMovimentoPassageirosNovoLayout;
import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio;
import com.rjconsultores.ventaboletos.service.EmpresaService;
import com.rjconsultores.ventaboletos.service.RutaService;
import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxEstandar;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;

@Controller("relatorioQuadroDemonstrativoMovimentoPassageirosController")
@Scope("prototype")
public class RelatorioQuadroDemonstrativoMovimentoPassageirosController extends MyGenericForwardComposer {

	private static final long serialVersionUID = 1L;
	@Autowired
	private DataSource dataSourceRead;
	@Autowired
	private EmpresaService empresaService;
	@Autowired
	private RutaService rutaService;
	private List<Empresa> lsEmpresa;
	private List<Ruta> lsLinhas;
	private Datebox datInicial;
	private Datebox datFinal;

	private MyComboboxEstandar cmbLinha;
	private Combobox cmbEmpresa;

	@Override
	public void doAfterCompose(Component comp) throws Exception {
		lsEmpresa = empresaService.obtenerTodos();
		lsLinhas = rutaService.obtenerTodos();
		super.doAfterCompose(comp);
	}

	public void onClick$btnExecutarRelatorio(Event ev) throws InterruptedException, Exception {
		executarRelatorio(1);
	}
	public void onClick$btnExecutarRelatorioNovoLayout(Event ev) throws InterruptedException, Exception {
		executarRelatorio(2);
	}
	
	private void executarRelatorio(int tipo) throws SQLException, Exception {
		
		SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
		Date dataDe = datInicial.getValue();
		Date dataAte = datFinal.getValue();

		Map<String, Object> parametros = new HashMap<String, Object>();
		parametros.put("DATA_DE", sdf.format(dataDe));
		parametros.put("DATA_ATE", sdf.format(dataAte));

		if (cmbLinha.getSelectedItem() != null) {
			Ruta ruta = (Ruta) cmbLinha.getSelectedItem().getValue();
			if (!ruta.getRutaId().equals(-1)) {
				ruta = ((Ruta) cmbLinha.getSelectedItem().getValue());
				parametros.put("LINHAS", (ruta.getNumRuta()));
				parametros.put("DESC_LINHAS_SELECIONADAS", (ruta.getDescruta()));
				parametros.put("CANTASIENTOS", (ruta.getCantAsientos() != null ? ruta.getCantAsientos().toString() : ""));
			}else {
				parametros.put("DESC_LINHAS_SELECIONADAS", "Todas");
			}
		}

		Comboitem cbiEmpresa = cmbEmpresa.getSelectedItem();
		String empresaId;
		String empresaDesc = "";
		if (cbiEmpresa != null) {
			Empresa empresa = (Empresa) cbiEmpresa.getValue();
			empresaId = empresa.getEmpresaId().toString();
			empresaDesc = empresa.getNombempresa();
		} else {
			empresaId = "0";
			for (int i = 0; i < lsEmpresa.size(); i++) {
				Empresa empresa = lsEmpresa.get(i);
				empresaId = empresaId + "," + empresa.getEmpresaId();
			}
		}
		parametros.put("EMPRESA", empresaDesc);
		parametros.put("EMPRESA_IDS", empresaId);
		Relatorio relatorio  = null;
		Map<String, Object> args = new HashMap<String, Object>();
		
		if(tipo == 1) {
			 relatorio = new RelatorioQuadroDemonstrativoMovimentoPassageiros(parametros, dataSourceRead.getConnection());
			 args.put("relatorio", relatorio);
			openWindow("/component/reportView.zul",	Labels.getLabel("indexController.mniRelatorioQuadroDemonstrativoMovimentoPassageiros.label"), args, MODAL);
		}else {
			 relatorio = new RelatorioQuadroDemonstrativoMovimentoPassageirosNovoLayout(parametros, dataSourceRead.getConnection());
			 args.put("relatorio", relatorio);
			 openWindow("/component/reportView.zul",	Labels.getLabel("indexController.mniRelatorioQuadroDemonstrativoMovimentoPassageiros.label"), args, MODAL);
		}	
	}

	public DataSource getDataSourceRead() {
		return dataSourceRead;
	}

	public void setDataSourceRead(DataSource dataSourceRead) {
		this.dataSourceRead = dataSourceRead;
	}

	public EmpresaService getEmpresaService() {
		return empresaService;
	}

	public void setEmpresaService(EmpresaService empresaService) {
		this.empresaService = empresaService;
	}

	public RutaService getRutaService() {
		return rutaService;
	}

	public void setRutaService(RutaService rutaService) {
		this.rutaService = rutaService;
	}

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

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

	public List<Ruta> getLsLinhas() {
		return lsLinhas;
	}

	public void setLsLinhas(List<Ruta> lsLinhas) {
		this.lsLinhas = lsLinhas;
	}

	public Datebox getDatInicial() {
		return datInicial;
	}

	public void setDatInicial(Datebox datInicial) {
		this.datInicial = datInicial;
	}

	public Datebox getDatFinal() {
		return datFinal;
	}

	public void setDatFinal(Datebox datFinal) {
		this.datFinal = datFinal;
	}

	public MyComboboxEstandar getCmbLinha() {
		return cmbLinha;
	}

	public void setCmbLinha(MyComboboxEstandar cmbLinha) {
		this.cmbLinha = cmbLinha;
	}

	public Combobox getCmbEmpresa() {
		return cmbEmpresa;
	}

	public void setCmbEmpresa(Combobox cmbEmpresa) {
		this.cmbEmpresa = cmbEmpresa;
	}

}
