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

import java.util.HashMap;
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.zk.ui.Component;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zul.Checkbox;
import org.zkoss.zul.Datebox;
import org.zkoss.zul.Radiogroup;
import org.zkoss.zul.Row;
import org.zkoss.zul.Textbox;

import com.rjconsultores.ventaboletos.entidad.Empresa;
import com.rjconsultores.ventaboletos.entidad.PuntoVenta;
import com.rjconsultores.ventaboletos.relatorios.impl.RelatorioObservacaoConferenciaMovimento;
import com.rjconsultores.ventaboletos.relatorios.utilitarios.Relatorio;
import com.rjconsultores.ventaboletos.utilerias.DateUtil;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;

@Scope("prototype")
@Controller("relatorioObservacaoConferenciaMovimentoController")
public class RelatorioObservacaoConferenciaMovimentoController extends MyGenericForwardComposer {

	private static final long serialVersionUID = 1L;
	
	private static Logger log = LogManager.getLogger(RelatorioObservacaoConferenciaMovimentoController.class);
	
	@Autowired
	private DataSource dataSourceRead;

	private Datebox dataInicial;
	private Datebox dataFinal;
	
    private PuntoVenta puntoVenta;
    private Empresa empresa; 
    
    private Textbox txtNumPendencia;
    
    private Checkbox chkPendencia;
    private Checkbox chkTaxaEmbarque;
    private Checkbox chkOutros;
    private Radiogroup rdCreditoDebito;
    
    private Row rwNumPendencia;
    
    @Override
    public void doAfterCompose(Component comp) throws Exception {
        super.doAfterCompose(comp);
    }
    
    public void onClick$btnRelatorio(Event ev) {
    	try {
    		Map<String, Object> parametros = new HashMap<String, Object>();
        	parametros.put("empresaId", empresa.getEmpresaId());
        	parametros.put("empresa", empresa.getNombempresa());
        	parametros.put("usuario", UsuarioLogado.getUsuarioLogado().getNombusuario());
        	parametros.put("fecInicio", DateUtil.getStringDate(dataInicial.getValue(), "dd/MM/yyyy"));
    		parametros.put("fecFinal", DateUtil.getStringDate(dataFinal.getValue(), "dd/MM/yyyy"));
    		parametros.put("dataFiltroInicial", dataInicial.getValue());
    		parametros.put("dataFiltroFinal", dataFinal.getValue());

    		if(puntoVenta != null) {
    			parametros.put("puntoventaId", puntoVenta.getPuntoventaId());
    			parametros.put("puntoventa", puntoVenta.getNombpuntoventa());
    		} else {
    			parametros.put("puntoventa", "Todos");
    		}
        	
    		parametros.put("pendenciaId", txtNumPendencia.getValue());
			parametros.put("pendencia", chkPendencia.isChecked());
			parametros.put("taxaEmbarque", chkTaxaEmbarque.isChecked());
			parametros.put("credito", rdCreditoDebito.getSelectedItem()!= null ? rdCreditoDebito.getSelectedItem().getLabel().equals(
					Labels.getLabel("relatorioObservacaoConferenciaMovimentoController.rdCredito.label")): null);
			parametros.put("outros", chkOutros.isChecked());
    		
    		Relatorio relatorio =  new RelatorioObservacaoConferenciaMovimento(parametros, dataSourceRead.getConnection()); 
        	
        	Map<String, Object> args = new HashMap<String, Object>();
    		args.put("relatorio", relatorio);

    		openWindow("/component/reportView.zul",
    				   Labels.getLabel("relatorioObservacaoConferenciaMovimentoController.window.title"), args, MODAL);			
		} catch (Exception e) {
			log.error(e.getMessage(), e);
		}
    }
    
    public void onCheck$chkPendencia(Event ev) {
    	//se o check estiver selecionado a linha (row) é exibida, caso contrário a linha é ocultada
    	rwNumPendencia.setVisible(chkPendencia.isChecked());
    	//O campo Num Pendência ganha o foco se e apenas se a linha num pendencia for exibida na tela
    	txtNumPendencia.setFocus(rwNumPendencia.isVisible());
    }

	public PuntoVenta getPuntoVenta() {
		return puntoVenta;
	}

	public void setPuntoVenta(PuntoVenta puntoVenta) {
		this.puntoVenta = puntoVenta;
	}

	public Empresa getEmpresa() {
		return empresa;
	}

	public void setEmpresa(Empresa empresa) {
		this.empresa = empresa;
	}

}
