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

import java.sql.Connection;
import java.util.ArrayList;
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.Comboitem;

import com.rjconsultores.ventaboletos.entidad.Empresa;
import com.rjconsultores.ventaboletos.entidad.PuntoVenta;
import com.rjconsultores.ventaboletos.relatorios.impl.RelatorioDescontoCupom;
import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio;
import com.rjconsultores.ventaboletos.service.EmpresaService;
import com.rjconsultores.ventaboletos.service.PuntoVentaService;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxEstandar;
import com.rjconsultores.ventaboletos.web.utilerias.MyDatebox;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;
import com.rjconsultores.ventaboletos.web.utilerias.paginacion.PagedListWrapper;

@Controller("relatorioDescontoPorCupomController")
@Scope("prototype")

public class RelatorioDescontoPorCupomController extends MyGenericForwardComposer {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	@Autowired
	private transient PagedListWrapper<PuntoVenta> plwPuntoVenta;
	@Autowired
	private DataSource dataSourceRead;

	@Autowired
	private EmpresaService empresaService;
	private MyComboboxEstandar cmbEmpresa;
	private List<Empresa> lsEmpresa;

	@Autowired
	private PuntoVentaService puntoVentaService;
	private MyComboboxEstandar cmbPuntoVenta;
	private List<PuntoVenta> lsPuntoVenta;

	private MyDatebox datInicial;
	private MyDatebox datFinal;
	private MyDatebox datResgateInicial;
	private MyDatebox datResgateFinal;

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

		lsEmpresa = empresaService.obtenerTodos();
		lsPuntoVenta = puntoVentaService.obtenerTodos();
		


		super.doAfterCompose(comp);
	}

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

	@SuppressWarnings({ "rawtypes", "unchecked" })
	private void executarRelatorio() throws Exception {
		Relatorio relatorio;
		Map<String, Object> parametros = new HashMap<String, Object>();
		StringBuilder filtro = new StringBuilder();

		parametros.put("DATA_INICIAL", (java.util.Date) this.datInicial.getValue());
		parametros.put("DATA_FINAL", (java.util.Date) this.datFinal.getValue());
		parametros.put("DATA_RESGATEINICIAL", (java.util.Date) this.datResgateInicial.getValue());
		parametros.put("DATA_RESGATEFINAL", (java.util.Date) this.datResgateFinal.getValue());
		parametros.put("NOME_RELATORIO", Labels.getLabel("relatorioDescontoPorCupomController.window.title"));
		parametros.put("USUARIO", UsuarioLogado.getUsuarioLogado().getUsuarioId().toString());

		filtro.append(" Empresa: ");

		Comboitem itemEmpresa = cmbEmpresa.getSelectedItem();
		if (itemEmpresa != null) {
			Empresa empresa = (Empresa) itemEmpresa.getValue();
			parametros.put("EMPRESA_ID", empresa.getEmpresaId());
			parametros.put("EMPRESA", empresa.getNombempresa());
			filtro.append(empresa.getNombempresa() + ";");
		} else {
			filtro.append("Todas;");
		}

		filtro.append(" Empresa: ");

		Comboitem itemPuntoVenta = cmbPuntoVenta.getSelectedItem();
		if (itemPuntoVenta != null) {
			PuntoVenta puntoVenta = (PuntoVenta) itemPuntoVenta.getValue();
			parametros.put("PUNTOVENTA_ID", puntoVenta.getPuntoventaId());
			parametros.put("PUNTOVENTA", puntoVenta.getNombpuntoventa());
			filtro.append(puntoVenta.getNombpuntoventa() + ";");
		} else {
			filtro.append("Todas;");
		}

		parametros.put("FILTROS", filtro.toString());

		Connection connection = dataSourceRead.getConnection();
		try {
			relatorio = new RelatorioDescontoCupom(parametros, connection);
			Map args = new HashMap();
			args.put("relatorio", relatorio);

			openWindow("/component/reportView.zul", Labels.getLabel("relatorioW2IController.window.title"), args,
					MODAL);
		} finally {
			if ((connection != null) && !connection.isClosed()) {
				connection.close();
			}
		}
	}

	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;
	}

}
