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

import java.util.Arrays;
import java.util.HashMap;
import java.util.List;

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.zkplus.databind.BindingListModelList;
import org.zkoss.zul.Combobox;
import org.zkoss.zul.api.Datebox;

import com.rjconsultores.ventaboletos.entidad.Empleado;
import com.rjconsultores.ventaboletos.entidad.Empresa;
import com.rjconsultores.ventaboletos.entidad.TipoEmpleado;
import com.rjconsultores.ventaboletos.relatorios.impl.RelatorioTripulacao;
import com.rjconsultores.ventaboletos.service.EmpleadoService;
import com.rjconsultores.ventaboletos.service.EmpresaService;
import com.rjconsultores.ventaboletos.service.TipoEmpleadoService;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;

@Controller("relatorioTripulacaoController")
@Scope("prototype")
public class RelatorioTripulacaoController extends MyGenericForwardComposer {

	private static final long serialVersionUID = 1L;

	// private Logger logger = LogManager.getLogger(RelatorioTripulacaoController.class);

	private Datebox datInicial;
	private Datebox datFinal;
	private Combobox cmbEmpresa;
	private Combobox cmbEmpleado;
	private Combobox cmbTipoEmpleado;

	private Empresa empresa;
	private Empleado empleado;

	private List<Empresa> lsEmpresa;
	private List<Empleado> lsEmpleado;
	private List<String> lsTipoEmpleado;

	@Autowired
	private DataSource dataSourceRead;

	@Autowired
	EmpresaService empresaService;

	@Autowired
	EmpleadoService empleadoService;

	@Autowired
	TipoEmpleadoService tipoEmpleadoService;

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

	public List<Empleado> getLsEmpleado() {
		return lsEmpleado;
	}

	public List<String> getLsTipoEmpleado() {
		return lsTipoEmpleado;
	}

	@Override
	public void doAfterCompose(Component comp) throws Exception {
		lsEmpresa = empresaService.obtenerTodos();
		lsEmpleado = empleadoService.obtenerTodos();
		lsTipoEmpleado = Arrays.asList(
				Labels.getLabel("relatorioTripulacao.conductor"), 
				Labels.getLabel("relatorioTripulacao.guardia"));
		super.doAfterCompose(comp);

	}

	public void onBlur$cmbEmpresa(Event ev) throws Exception {
		empresa = cmbEmpresa.getSelectedItem() != null ? (Empresa) cmbEmpresa.getSelectedItem().getValue() : null;
		if (empresa != null) {
			lsEmpleado = empleadoService.pesquisaEmpresa(empresa);
		} else {
			lsEmpleado = empleadoService.obtenerTodos();
		}

		BindingListModelList l = new BindingListModelList(lsEmpleado, true);
		cmbEmpleado.setModel(l);
		cmbEmpleado.setSelectedItem(null);
	}

	public void onBlur$cmbEmpleado(Event ev) throws Exception {
		empleado = cmbEmpleado.getSelectedItem() != null ? (Empleado) cmbEmpleado.getSelectedItem().getValue() : null;
	}

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

	public void executarRelatorio() throws Exception {
		HashMap<String, Object> parametros = new HashMap<String, Object>();
		String tipoEmpleado = null;

		if (cmbTipoEmpleado.getSelectedItem() != null) {
			tipoEmpleado = (String) cmbTipoEmpleado.getSelectedItem().getValue();
		}
		parametros.put("empresa", empresa);
		parametros.put("empleado", empleado);
		parametros.put("tipoEmpleado", tipoEmpleado);

		parametros.put("fecInicio", datInicial.getValue());
		parametros.put("fecFinal", datFinal.getValue());

		parametros.put("nomeEmpresa", empresa != null ? empresa.getNombempresa() : "");
		parametros.put("nomeEmpleado", empleado != null ? empleado.getNombEmpleado() : "");

		parametros.put("relatorio", new RelatorioTripulacao(parametros, dataSourceRead.getConnection()));
		parametros.put("titulo", Labels.getLabel("relatorioTripulacao.label"));
		openWindow("/component/reportView.zul",
				Labels.getLabel("relatorioTripulacao.label"), parametros, MODAL);
	}

	/*
	 * private class EmpleadoRenderer implements ComboitemRenderer {
	 * 
	 * @Override public void render(Comboitem combo, Object object) throws Exception { Empleado empleado = (Empleado) object; combo.setLabel(empleado.getNombEmpleado()); } }
	 */

}
