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

import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.sql.DataSource;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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.Combobox;
import org.zkoss.zul.Datebox;
import org.zkoss.zul.Messagebox;

import com.rjconsultores.ventaboletos.entidad.Empresa;
import com.rjconsultores.ventaboletos.entidad.PuntoVenta;
import com.rjconsultores.ventaboletos.relatorios.impl.RelatorioHistoricoComissao;
import com.rjconsultores.ventaboletos.relatorios.impl.RelatorioHistoricoComissaoGeral;
import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio;
import com.rjconsultores.ventaboletos.service.ComissaoService;
import com.rjconsultores.ventaboletos.service.EmpresaService;
import com.rjconsultores.ventaboletos.vo.comissao.HistoricoComissao;
import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxPuntoVenta;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;

@Scope("prototype")
@Controller("busquedaHistoricoComissaoController")
public class BusquedaHistoricoComissaoController extends MyGenericForwardComposer {

	private static final long serialVersionUID = 1L;
	private static final Logger log = LoggerFactory.getLogger(BusquedaHistoricoComissaoController.class);

	@Autowired
	private ComissaoService comissaoService;

	@Autowired
	private EmpresaService empresaService;

	@Autowired
	private DataSource dataSourceRead;

	private Combobox cmbEmpresa;
	private List<Empresa> lsEmpresas;
	private List<PuntoVenta> lsPuntoVenta;
	private MyComboboxPuntoVenta cmbPuntoVenta;
	private Datebox datMesInicio;
	private Datebox datMesFim;

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

		lsEmpresas = empresaService.obtenerTodos();
		lsPuntoVenta = new ArrayList<PuntoVenta>();
	}

	public void onClick$btnRelatorio(Event ev) throws SQLException, InterruptedException {

		try {
			PuntoVenta puntoVenta = (PuntoVenta) (cmbPuntoVenta.getSelectedItem() != null ? cmbPuntoVenta.getSelectedItem().getValue() : null);
			Empresa empresa = (Empresa) (cmbEmpresa.getSelectedItem() != null ? cmbEmpresa.getSelectedItem().getValue() : null);
			Date periodoInicial = datMesInicio.getValue();
			Date periodoFinal = datMesFim.getValue();

			List<HistoricoComissao> historico = comissaoService.buscaHistoricoComissao(puntoVenta != null ? puntoVenta.getPuntoventaId() : null, empresa.getEmpresaId(), periodoInicial, periodoFinal);

			Map<String, Object> parametros = new HashMap<String, Object>();
			parametros.put("puntoventa", puntoVenta != null ? puntoVenta.getNombpuntoventa() : "Todos");
			parametros.put("empresa", empresa.getNombempresa());
			parametros.put("periodoInicial", periodoInicial);
			parametros.put("periodoFinal", periodoFinal);
			parametros.put("historico", historico);

			Relatorio relatorio = null;
			if(puntoVenta != null && puntoVenta.getPuntoventaId() > -1) {
				relatorio = new RelatorioHistoricoComissao(parametros, dataSourceRead.getConnection());
			} else if(puntoVenta == null) {
				relatorio = new RelatorioHistoricoComissaoGeral(parametros, dataSourceRead.getConnection());
			}

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

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

		} catch (Exception e) {
			log.error("", e);
			Messagebox.show(e.getMessage(), Labels.getLabel("busquedaHistoricoComissaoController.window.title"),
					Messagebox.OK, Messagebox.ERROR);
		}

	}

	public Combobox getCmbEmpresa() {
		return cmbEmpresa;
	}

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

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

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

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

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

	public MyComboboxPuntoVenta getCmbPuntoVenta() {
		return cmbPuntoVenta;
	}

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

}
