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

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

import javax.sql.DataSource;

import org.apache.log4j.Logger;
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.Datebox;

import com.rjconsultores.ventaboletos.entidad.Autobus;
import com.rjconsultores.ventaboletos.entidad.Empresa;
import com.rjconsultores.ventaboletos.relatorios.impl.RelatorioEmpresaOnibus;
import com.rjconsultores.ventaboletos.relatorios.impl.RelatorioEmpresaOnibusResumo;
import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio;
import com.rjconsultores.ventaboletos.service.AutobusService;
import com.rjconsultores.ventaboletos.service.EmpresaService;
import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxEstandar;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;

@Controller("relatorioEmpresaOnibusController")
@Scope("prototype")
public class RelatorioEmpresaOnibusController extends MyGenericForwardComposer {
	private static final long serialVersionUID = 1L;
	private static Logger log = Logger.getLogger(RelatorioEmpresaOnibusController.class);

	@Autowired
	private DataSource dataSourceRead;
	@Autowired 
	private EmpresaService empresaService;
	@Autowired 
	private AutobusService autobusService;
	
	private Datebox datInicial;
	private Datebox datFinal;
	private MyComboboxEstandar cmbEmpresa;
	private MyComboboxEstandar cmbAutobus;
	private Checkbox chkResumo;
	
	private List<Empresa> lsEmpresas;
	private List<Autobus> lsAutobus;
	
	private void executarRelatorio() throws Exception {

		Map<String, Object> parametros = new HashMap<String, Object>();

		Empresa empresa =  cmbEmpresa.getSelectedItem() != null ? (Empresa)cmbEmpresa.getSelectedItem().getValue() : null;
		Autobus autobus = cmbAutobus.getSelectedItem() != null ? (Autobus)cmbAutobus.getSelectedItem().getValue() : null;
		
		SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
		parametros.put("fecInicio", sdf.format(this.datInicial.getValue()));
		parametros.put("fecFinal", sdf.format(this.datFinal.getValue()));
		
		if (empresa != null){
			parametros.put("empresa", empresa.getEmpresaId());
		}
		
		if (autobus != null){
			parametros.put("autobus", autobus.getAutobusId());
		}
		
		Relatorio relatorio;
		
		if (chkResumo.isChecked()){
			parametros.put("TITULO", Labels.getLabel("relatorioEmpresaOnibusResumoController.window.title"));
			relatorio = new RelatorioEmpresaOnibusResumo(parametros, dataSourceRead.getConnection());
		} else {
			parametros.put("TITULO", Labels.getLabel("relatorioEmpresaOnibusController.window.title"));
			relatorio = new RelatorioEmpresaOnibus(parametros, dataSourceRead.getConnection());
		}
		
		Map<String, Object> args = new HashMap<String, Object>();
		args.put("relatorio", relatorio);

		openWindow("/component/reportView.zul",
				Labels.getLabel("relatorioEmpresaOnibusController.window.title"), args, MODAL);

	}

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

	@Override
	public void doAfterCompose(Component comp) throws Exception {
		lsEmpresas = empresaService.obtenerTodos();
		lsAutobus = autobusService.obtenerTodos();
		
		super.doAfterCompose(comp);
	}

	public MyComboboxEstandar getCmbEmpresa() {
		return cmbEmpresa;
	}

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

	public List<Empresa> getLsEmpresas() {
		return lsEmpresas;
	}

	public void setLsEmpresas(List<Empresa> lsEmpresas) {
		this.lsEmpresas = lsEmpresas;
	}

	public List<Autobus> getLsAutobus() {
		return lsAutobus;
	}

	public void setLsAutobus(List<Autobus> lsAutobus) {
		this.lsAutobus = lsAutobus;
	}

}
