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.Datebox;

import com.rjconsultores.ventaboletos.entidad.Categoria;
import com.rjconsultores.ventaboletos.entidad.Empresa;
import com.rjconsultores.ventaboletos.entidad.Parada;
import com.rjconsultores.ventaboletos.entidad.PuntoVenta;
import com.rjconsultores.ventaboletos.entidad.Ruta;
import com.rjconsultores.ventaboletos.relatorios.impl.RelatorioGratuidade;
import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio;
import com.rjconsultores.ventaboletos.service.CategoriaService;
import com.rjconsultores.ventaboletos.service.EmpresaService;
import com.rjconsultores.ventaboletos.service.PuntoVentaService;
import com.rjconsultores.ventaboletos.service.RutaService;
import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxEstandar;
import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxParada;
import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxPuntoVenta;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;

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

	@Autowired
	private DataSource dataSourceRead;
	@Autowired
	private EmpresaService empresaService;
	@Autowired
	private PuntoVentaService puntoVentaService;
	@Autowired
	private RutaService rutaService;
	@Autowired
	private CategoriaService categoriaService;

	private Datebox datInicial;
	private Datebox datFinal;
	private MyComboboxEstandar cmbTeste;
	private MyComboboxPuntoVenta cmbAgencia;
	private MyComboboxEstandar cmbLinha;
	private MyComboboxParada cmbOrigem;
	private MyComboboxParada cmbDestino;
	private MyComboboxEstandar cmbTipoGratuidade;

	private List<Empresa> lsEmpresas;
	private List<Ruta> lsLinhas;
	private List<Categoria> lsCategorias;

	private void executarRelatorio() throws Exception {

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

		SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
		parametros.put("fecInicio", sdf.format(this.datInicial.getValue()));
		parametros.put("fecFinal", sdf.format(this.datFinal.getValue()));

		if (cmbTeste.getSelectedIndex() != -1) {
			parametros.put("empresa", ((Empresa) cmbTeste.getSelectedItem().getValue()).getEmpresaId());
		}
		if (cmbAgencia.getSelectedIndex() != -1) {
			parametros.put("agencia", ((PuntoVenta) cmbAgencia.getSelectedItem().getValue()).getPuntoventaId());
		}
		if (cmbLinha.getSelectedIndex() != -1) {
			parametros.put("ruta", ((Ruta) cmbLinha.getSelectedItem().getValue()).getRutaId());
		}
		if(cmbOrigem.getSelectedIndex() != -1){
			parametros.put("origem", ((Parada) cmbOrigem.getSelectedItem().getValue()).getParadaId());
		}
		if(cmbDestino.getSelectedIndex() != -1){
			parametros.put("destino", ((Parada) cmbDestino.getSelectedItem().getValue()).getParadaId());
		}
		if(cmbTipoGratuidade.getSelectedIndex() != -1){
			parametros.put("categoria", ((Categoria) cmbTipoGratuidade.getSelectedItem().getValue()).getCategoriaId());
		}
		
		parametros.put("TITULO", Labels.getLabel("relatorioGratuidadeController.window.title"));

		Relatorio relatorio = new RelatorioGratuidade(parametros, dataSourceRead.getConnection());

		Map<String, Object> args = new HashMap<String, Object>();
		args.put("relatorio", relatorio);

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

	}

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

	@Override
	public void doAfterCompose(Component comp) throws Exception {

		lsLinhas = rutaService.obtenerTodos();
		lsEmpresas = empresaService.obtenerTodos();
		lsCategorias = categoriaService.obtenerTodos();		

		super.doAfterCompose(comp);
	}

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

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

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

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

	public void setLsCategorias(List<Categoria> lsCategorias) {
		this.lsCategorias = lsCategorias;
	}

	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 MyComboboxPuntoVenta getCmbAgencia() {
		return cmbAgencia;
	}

	public void setCmbAgencia(MyComboboxPuntoVenta cmbAgencia) {
		this.cmbAgencia = cmbAgencia;
	}

	public MyComboboxEstandar getCmbLinha() {
		return cmbLinha;
	}

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

	public MyComboboxParada getCmbOrigem() {
		return cmbOrigem;
	}

	public void setCmbOrigem(MyComboboxParada cmbOrigem) {
		this.cmbOrigem = cmbOrigem;
	}

	public MyComboboxParada getCmbDestino() {
		return cmbDestino;
	}

	public void setCmbDestino(MyComboboxParada cmbDestino) {
		this.cmbDestino = cmbDestino;
	}

	public MyComboboxEstandar getCmbTipoGratuidade() {
		return cmbTipoGratuidade;
	}

	public void setCmbTipoGratuidade(MyComboboxEstandar cmbTipoGratuidade) {
		this.cmbTipoGratuidade = cmbTipoGratuidade;
	}
	
}
