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

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.Datebox;
import org.zkoss.zul.Radio;

import com.rjconsultores.ventaboletos.entidad.Empresa;
import com.rjconsultores.ventaboletos.entidad.PuntoVenta;
import com.rjconsultores.ventaboletos.relatorios.impl.RelatorioSegundaVia;
import com.rjconsultores.ventaboletos.relatorios.impl.RelatorioSegundaViaBoleto;
import com.rjconsultores.ventaboletos.relatorios.impl.RelatorioSegundaViaSeguroOpcional;
import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio;
import com.rjconsultores.ventaboletos.service.EmpresaService;
import com.rjconsultores.ventaboletos.service.PuntoVentaService;
import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxEstandar;
import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxPuntoVenta;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;

@Controller("relatorioSegundaViaController")
@Scope("prototype")
public class RelatorioSegundaViaController extends MyGenericForwardComposer {

	private static final long serialVersionUID = 1L;

	@Autowired
	private DataSource dataSourceRead;
	@Autowired
	private EmpresaService empresaService;
	@Autowired
	private PuntoVentaService puntoVentaService;

	private List<PuntoVenta> lsPuntoVenta;
	private List<Empresa> lsEmpresa;

	private Datebox txtDataInicial;
	private Datebox txtDataFinal;
	private MyComboboxEstandar cmbEmpresa;
	private MyComboboxPuntoVenta cmbPuntoVenta;
	
	private Radio rdTipoCaja;
	private Radio rdTipoBoleto;
	private Radio rdTipoSeguroOpcional;

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

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

		Map<String, Object> parametros = new HashMap<String, Object>();
		Empresa empresa = (Empresa) (cmbEmpresa.getSelectedItem() != null ? cmbEmpresa.getSelectedItem().getValue() : null);
		PuntoVenta puntoVenta = (PuntoVenta) (cmbPuntoVenta.getSelectedItem() != null ? cmbPuntoVenta.getSelectedItem().getValue() : null);
		Date dataInicial = txtDataInicial.getValue();
		Date dataFinal = txtDataFinal.getValue();

		parametros.put("empresaId", empresa == null ? null : empresa.getEmpresaId());
		parametros.put("empresa", empresa == null ? "Todas" : empresa.getNombempresa());
		parametros.put("puntoVentaId", puntoVenta == null ? null : puntoVenta.getPuntoventaId());
		parametros.put("puntoVenta", puntoVenta == null ? "Todas" : puntoVenta.getNombpuntoventa());
		parametros.put("dataInicial", dataInicial);
		parametros.put("dataFinal", dataFinal);
		parametros.put("NOME_RELATORIO", "RelatorioSegundaVia");

		Relatorio relatorio = null;
		if(rdTipoCaja.isChecked()) {
			relatorio = new RelatorioSegundaVia(parametros, dataSourceRead.getConnection());
		} else if(rdTipoBoleto.isChecked()) {
			relatorio = new RelatorioSegundaViaBoleto(parametros, dataSourceRead.getConnection());
		} else if(rdTipoSeguroOpcional.isChecked()) {
			relatorio = new RelatorioSegundaViaSeguroOpcional(parametros, dataSourceRead.getConnection());
		}

		Map args = new HashMap();
		args.put("relatorio", relatorio);

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

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

	}

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

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

	public List<PuntoVenta> getLsPuntoVenta() {
		return lsPuntoVenta;
	}

	public void setLsPuntoVenta(List<PuntoVenta> lsPuntoVenta) {
		this.lsPuntoVenta = lsPuntoVenta;
	}

	public PuntoVentaService getPuntoVentaService() {
		return puntoVentaService;
	}

	public void setPuntoVentaService(PuntoVentaService puntoVentaService) {
		this.puntoVentaService = puntoVentaService;
	}

	public Datebox getTxtDataInicial() {
		return txtDataInicial;
	}

	public void setTxtDataInicial(Datebox txtDataInicial) {
		this.txtDataInicial = txtDataInicial;
	}

	public Datebox getTxtDataFinal() {
		return txtDataFinal;
	}

	public void setTxtDataFinal(Datebox txtDataFinal) {
		this.txtDataFinal = txtDataFinal;
	}

	public MyComboboxEstandar getCmbEmpresa() {
		return cmbEmpresa;
	}

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

	public MyComboboxPuntoVenta getCmbPuntoVenta() {
		return cmbPuntoVenta;
	}

	public void setCmbPuntoVenta(MyComboboxPuntoVenta cmbPuntoVenta) {
		this.cmbPuntoVenta = cmbPuntoVenta;
	}

}
