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

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

import org.apache.commons.lang.StringUtils;
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.lang.Strings;
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.Button;
import org.zkoss.zul.Combobox;
import org.zkoss.zul.Comboitem;
import org.zkoss.zul.Longbox;
import org.zkoss.zul.Textbox;

import com.rjconsultores.ventaboletos.entidad.GrupoContrato;
import com.rjconsultores.ventaboletos.entidad.Parada;
import com.rjconsultores.ventaboletos.entidad.Transportadora;
import com.rjconsultores.ventaboletos.entidad.Voucher;
import com.rjconsultores.ventaboletos.enums.SituacaoVoucher;
import com.rjconsultores.ventaboletos.service.GrupoContratoService;
import com.rjconsultores.ventaboletos.service.ParadaService;
import com.rjconsultores.ventaboletos.service.TransportadoraService;
import com.rjconsultores.ventaboletos.service.VoucherService;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
@Controller("busquedaFaturarVoucherController")
@Scope("prototype")
public class BusquedaFaturarVoucherController extends MyGenericForwardComposer {

	private static Logger log = LogManager.getLogger(BusquedaFaturarVoucherController.class); 
	private static final long serialVersionUID = 5214942034025004656L;
	private static final String TITULO = "faturarVoucherController.window.title";
	
	@Autowired
	private VoucherService voucherService;
	
	@Autowired
	private ParadaService paradaService;
	
	@Autowired
	private TransportadoraService transportadoraService;
	
	@Autowired
	private GrupoContratoService grupoService;

	private Longbox txtNumInicial;
	private Longbox txtNumFinal;
	private Textbox txtNumContrato;
	private Textbox txtNit;
	private Textbox txtNome;
	private Combobox cmbOrigem;
	private Combobox cmbDestino;
	private Button btnPesquisar;
	private Combobox cmbTransportadora;
	private Combobox cmbGrupo;
	
	private List<Transportadora> lsTransportadora;
	private List<GrupoContrato> lsGrupo;

	@Override
	public void doAfterCompose(Component comp) throws Exception {
		
		setLsTransportadora(transportadoraService.obtenerTodos());
		setLsGrupo(grupoService.obtenerTodos());
		
		super.doAfterCompose(comp);

	}

	public void onClick$btnPesquisar(Event ev) throws InterruptedException {
		
		String numContrato = null;
		if( !Strings.isBlank(txtNumContrato.getValue()) ) {
			numContrato = txtNumContrato.getValue();
		}
		
		Transportadora transportadora = null;
		Comboitem transp = cmbTransportadora.getSelectedItem();		
		if( transp != null ) {
			transportadora = (Transportadora)transp.getValue();
		}
		
		GrupoContrato grupoContrato = null;
		Comboitem grup = cmbGrupo.getSelectedItem();		
		if( grup != null ) {
			grupoContrato = (GrupoContrato)grup.getValue();
		}
		
		Parada origem = null;
		Comboitem orig = cmbOrigem.getSelectedItem();		
		if( orig != null ) {
			origem = (Parada)orig.getValue();
		}
		
		Parada destino = null;
		Comboitem dest = cmbDestino.getSelectedItem();		
		if( dest != null ) {
			destino = (Parada)dest.getValue();
		}
		
		List<Voucher> listaVoucher = voucherService.buscarListaVoucher( txtNumInicial.getValue(),
										  txtNumFinal.getValue(),
										  numContrato,
										  transportadora==null?null:transportadora.getTransportadoraId(),
										  grupoContrato==null?null:grupoContrato.getGrupoContratoId(),
										  SituacaoVoucher.LEGALIZADO.getValor(),
										  origem==null?null:origem.getParadaId(), 
										  destino==null?null:destino.getParadaId());
		if (listaVoucher.isEmpty()) {
			try {
				Messagebox.show(Labels.getLabel("MSG.ningunRegistro"),
						Labels.getLabel(TITULO),
						Messagebox.OK, Messagebox.INFORMATION);
			} catch (InterruptedException ex) {
				log.error(ex);
			}
		}else {
			preencheComplemento(listaVoucher);
			
			Map<String, Object> args = new HashMap<String, Object>();
			args.put("listaVoucher", listaVoucher);

			openWindow("/gui/configuraciones_comerciales/negcorporativos/faturarVoucher.zul",
					Labels.getLabel("editarVoucherController.window.title"), args, MODAL);
		}

	}
	
	public void onBlur$txtNit(Event ev) throws InterruptedException {
		if(txtNit.getValue() != null && !txtNit.getValue().isEmpty()) {
			Transportadora transp = transportadoraService.buscarPorNit(txtNit.getValue());
			if(transp != null) {
				selecionaCombo(transp, cmbTransportadora);
				txtNumContrato.setFocus(true);
			}else {
				Messagebox.show(
						Labels.getLabel("faturarVoucherController.MSG.nitNaoEncontrado"),
						Labels.getLabel(TITULO),
						Messagebox.OK, Messagebox.ERROR);
			}
		}
	}
	
	private void preencheComplemento(List<Voucher> listaVoucher) {
		for (Voucher item : listaVoucher) {			
			if( StringUtils.isEmpty(item.getDescOrigem()) || StringUtils.isEmpty(item.getDescDestino() )) {
				List<String> origemDestino = paradaService.buscarDescOrigemDestino(item.getOrigenId(), item.getDestinoId());
				if(! origemDestino.isEmpty() ) {
					item.setDescOrigem( origemDestino.get(0) );
					item.setDescDestino( origemDestino.get(1) );
				}
			}
		}
	}
}
