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

import java.sql.Connection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.sql.DataSource;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.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.zhtml.Messagebox;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zul.Comboitem;
import org.zkoss.zul.ComboitemRenderer;
import org.zkoss.zul.Datebox;

import com.rjconsultores.ventaboletos.entidad.Articulo;
import com.rjconsultores.ventaboletos.entidad.Empresa;
import com.rjconsultores.ventaboletos.entidad.PuntoVenta;
import com.rjconsultores.ventaboletos.relatorios.impl.RelatorioConferenciaFormularioFisico;
import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio;
import com.rjconsultores.ventaboletos.service.ArticuloService;
import com.rjconsultores.ventaboletos.service.EmpresaService;
import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxEstandar;
import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxPuntoVenta;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;

@Controller("relatorioConferenciaFormularioFisicoController")
@Scope("prototype")
public class RelatorioConferenciaFormularioFisicoController  extends MyGenericForwardComposer {

	private static final long serialVersionUID = 1L;
	private static Logger log = LogManager.getLogger(RelatorioConferenciaFormularioFisicoController.class);
	
	private MyComboboxEstandar cmbEmpresa;
	private MyComboboxPuntoVenta cmbPuntoVenta;
	private MyComboboxEstandar cmbTipoVenda;
	private Datebox datInicial;
	private Datebox datFinal;
	
	@Autowired
	private EmpresaService empresaService;
	@Autowired
	private ArticuloService articuloService;
	
	private List<Empresa> lsEmpresas;
	private List<Articulo> lsTiposVenda;

	@Autowired
	private DataSource dataSourceRead;

	@Override
	public void doAfterCompose(Component comp) throws Exception {
		lsEmpresas = empresaService.obtenerTodos();
		lsTiposVenda = articuloService.obtenerTodos();
		
		super.doAfterCompose(comp);
		
		cmbTipoVenda.setItemRenderer(new ComboitemRenderer() {
			@Override
			public void render(Comboitem cmbtm, Object o) throws Exception {
				Articulo tipo = (Articulo) o;

				cmbtm.setLabel(tipo.getDescarticulo());
				cmbtm.setValue(tipo);
			}
		});
	}
	
	public void onClick$btnExecutarRelatorio(Event ev) throws Exception {		
		if (cmbEmpresa.getSelectedItem() == null){
			Messagebox.show(Labels.getLabel("relatorioConferenciaFormularioFisicoController.msg.erro.empresa"),
					Labels.getLabel("relatorioConferenciaFormularioFisicoController.window.title"),
					Messagebox.OK, Messagebox.INFORMATION);
			return;
		}
		executarRelatorio();
	}
	
	private void executarRelatorio() throws Exception {	 	
		
		Connection con = dataSourceRead.getConnection();
		
		Integer puntoVentaId = null;
		
		if (cmbPuntoVenta.getSelectedIndex() != -1){
				((PuntoVenta)cmbPuntoVenta.getSelectedItem().getValue()).getPuntoventaId();
		}
		Integer empresaId = ((Empresa)cmbEmpresa.getSelectedItem().getValue()).getEmpresaId();
	
		
		if (datInicial.getValue() == null && datFinal.getValue() == null) {

			Messagebox.show(Labels.getLabel("relatorioCheckinController.MSG.erroPeriodo"),
					Labels.getLabel("indexController.mniRelatorioConferenciaFormularioFisico.label"),
					Messagebox.OK, Messagebox.INFORMATION);
			return;
		}

		Map<String, Object> parametros = new HashMap<String, Object>();
		parametros.put("AGENCIA", cmbPuntoVenta.getSelectedIndex() != -1 ? ((PuntoVenta)cmbPuntoVenta.getSelectedItem().getValue()).getNombpuntoventa(): null);
		parametros.put("EMPRESA", ((Empresa)cmbEmpresa.getSelectedItem().getValue()).getNombempresa());
		parametros.put("PUNTOVENTA_ID", cmbPuntoVenta.getSelectedIndex() != -1 ? ((PuntoVenta)cmbPuntoVenta.getSelectedItem().getValue()).getPuntoventaId() : null);
		parametros.put("TIPOVENTA_ID", cmbTipoVenda.getSelectedIndex() != -1 ? ((Articulo)cmbTipoVenda.getSelectedItem().getValue()).getArticuloId() : null);
		parametros.put("DATA_INICIAL", datInicial.getValue());
		parametros.put("DATA_FINAL", datFinal.getValue());
		parametros.put("EMPRESA_ID", ((Empresa)cmbEmpresa.getSelectedItem().getValue()).getEmpresaId());
		parametros.put("NOME_RELATORIO", Labels.getLabel("indexController.mniRelatorioConferenciaFormularioFisico.label"));
		
		Relatorio relatorio = new RelatorioConferenciaFormularioFisico(parametros, con);

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

		openWindow("/component/reportView.zul",
				Labels.getLabel("indexController.mniRelatorioConferenciaFormularioFisico.label"), args, MODAL);
		

	}

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

	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 List<Empresa> getLsEmpresas() {
		return lsEmpresas;
	}

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

	public List<Articulo> getLsTiposVenda() {
		return lsTiposVenda;
	}

	public void setLsTiposVenda(List<Articulo> lsTiposVenda) {
		this.lsTiposVenda = lsTiposVenda;
	}	
	
}
