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

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

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.zk.ui.event.EventListener;
import org.zkoss.zul.Combobox;
import org.zkoss.zul.Comboitem;
import org.zkoss.zul.ComboitemRenderer;
import org.zkoss.zul.Intbox;
import org.zkoss.zul.Paging;

import com.rjconsultores.ventaboletos.entidad.ExcepcionPeaje;
import com.rjconsultores.ventaboletos.entidad.Parada;
import com.rjconsultores.ventaboletos.entidad.Ruta;
import com.rjconsultores.ventaboletos.service.ExcepcionPeajeService;
import com.rjconsultores.ventaboletos.service.RutaService;
import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxParada;
import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxParadaCve;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;
import com.rjconsultores.ventaboletos.web.utilerias.MyListbox;
import com.rjconsultores.ventaboletos.web.utilerias.paginacion.HibernateSearchObject;
import com.rjconsultores.ventaboletos.web.utilerias.paginacion.PagedListWrapper;
import com.rjconsultores.ventaboletos.web.utilerias.render.RenderExcepcionPeaje;

@Controller("busquedaExcepcionPeajeController")
@Scope("prototype")
public class BusquedaExcepcionPeajeController  extends MyGenericForwardComposer {
	
	private static final long serialVersionUID = 1L;
	
	@Autowired
	private transient PagedListWrapper<ExcepcionPeaje> plwExcepcionPeaje;
	private MyComboboxParada cmbParadaOrigem;
	private MyComboboxParadaCve cmbParadaOrigemCve;
	private MyComboboxParada cmbParadaDestino;
	private MyComboboxParadaCve cmbParadaDestinoCve;
	private List<Ruta> lsRuta;
	private Combobox cmbRuta;
	@Autowired
	private RutaService rutaService;
	@Autowired
    private ExcepcionPeajeService excepcionPeajeService;
	private Paging pagingExcepcionPeaje;
	private MyListbox excepcionPeajeList;
	private List<ExcepcionPeaje> lsExcepcionPeaje;
	private Intbox txtId;
	
	@Override
    public void doAfterCompose(Component comp) throws Exception {
        super.doAfterCompose(comp);
        lsRuta = rutaService.obtenerTodos();
        cmbParadaOrigemCve.setItemRenderer(new ComboitemRenderer() {
			@Override
			public void render(Comboitem cmbtm, Object o) throws Exception {
				Parada parada = (Parada) o;

				cmbtm.setLabel(parada.getCveparada());
				cmbtm.setValue(parada);
			}
		});

		cmbParadaDestinoCve.setItemRenderer(new ComboitemRenderer() {
			@Override
			public void render(Comboitem cmbtm, Object o) throws Exception {
				Parada parada = (Parada) o;

				cmbtm.setLabel(parada.getCveparada());
				cmbtm.setValue(parada);
			}
		});
		
		excepcionPeajeList.setItemRenderer(new RenderExcepcionPeaje());
		
		lsExcepcionPeaje = excepcionPeajeService.obtenerTodos();
		Collections.sort(lsExcepcionPeaje);
		excepcionPeajeList.setData(lsExcepcionPeaje);
		
		excepcionPeajeList.addEventListener("onDoubleClick", new EventListener() {

			@Override
			public void onEvent(Event event) throws Exception {
				ExcepcionPeaje ep = (ExcepcionPeaje) excepcionPeajeList.getSelected();
				verExcepcionPeaje(ep, true);
			}
		});
		
    }
	public void onSelect$cmbParadaOrigemCve(Event ev) {
		if (cmbParadaOrigemCve.getSelectedItem() != null) {
			cmbParadaOrigem.setComboItemByParada((Parada) cmbParadaOrigemCve.getSelectedItem().getValue());
		}
	}

	public void onSelect$cmbParadaOrigem(Event ev) {
		if (cmbParadaOrigem.getSelectedItem() != null)
			cmbParadaOrigemCve.setComboItemByParada((Parada) cmbParadaOrigem.getSelectedItem().getValue());
	}

	public void onSelect$cmbParadaDestinoCve(Event ev) {
		if (cmbParadaDestinoCve.getSelectedItem() != null) {
			cmbParadaDestino.setComboItemByParada((Parada) cmbParadaDestinoCve.getSelectedItem().getValue());
		}
	}

	public void onSelect$cmbParadaDestino(Event ev) {
		if (cmbParadaDestino.getSelectedItem() != null) {
			cmbParadaDestinoCve.setComboItemByParada((Parada) cmbParadaDestino.getSelectedItem().getValue());
		}
	}
	
	public List<Ruta> getLsRuta() {
		return lsRuta;
	}
	
	public void setLsRuta(List<Ruta> lsRuta) {
		this.lsRuta = lsRuta;
	}
	public Combobox getCmbRuta() {
		return cmbRuta;
	}
	public void setCmbRuta(Combobox cmbRuta) {
		this.cmbRuta = cmbRuta;
	}
	public Paging getPagingExcepcionPeaje() {
		return pagingExcepcionPeaje;
	}
	public void setPagingExcepcionPeaje(Paging pagingExcepcionPeaje) {
		this.pagingExcepcionPeaje = pagingExcepcionPeaje;
	}
	public MyListbox getExcepcionPeajeList() {
		return excepcionPeajeList;
	}
	public void setExcepcionPeajeList(MyListbox excepcionPeajeList) {
		this.excepcionPeajeList = excepcionPeajeList;
	}
	private void verExcepcionPeaje(ExcepcionPeaje ep , boolean isEdicao) {
		if (ep == null) {
			return;
		}
		
		Map args = new HashMap();
		args.put("excepcionPeaje", ep);
		args.put("excepcionPeajeList", excepcionPeajeList);
		args.put("lsExcepcionPeaje", lsExcepcionPeaje);
		args.put("isEdicao", isEdicao);

		openWindow("/gui/configuraciones_comerciales/editarExcepcionPeaje.zul",
				Labels.getLabel("editarExcepcionPeajeController.window.title"), args, MODAL);
	}
	public void onClick$btnNovo(Event ev) {
		verExcepcionPeaje(new ExcepcionPeaje() , false);
	}
	
	public void refreshLista() {
		HibernateSearchObject<ExcepcionPeaje> busquedaExcepcionPeaje =
				new HibernateSearchObject<ExcepcionPeaje>(ExcepcionPeaje.class,
						pagingExcepcionPeaje.getPageSize());

		busquedaExcepcionPeaje.addFilterEqual("activo", Boolean.TRUE);

		Integer id = txtId.getValue();
		busquedaExcepcionPeaje.addFilterEqual("excepcionPeajeId", id);
		
		Comboitem cbiRuta = cmbRuta.getSelectedItem();
		Ruta ruta = null;
		if (cbiRuta != null) {
			ruta = (Ruta) cbiRuta.getValue();
			busquedaExcepcionPeaje.addFilterEqual("ruta", ruta);
		}
		
		Comboitem cbiOrigem = cmbParadaOrigem.getSelectedItem();
		Parada origen = null;
		if (cbiOrigem != null) {
			origen = (Parada) cbiOrigem.getValue();
			busquedaExcepcionPeaje.addFilterEqual("origem", origen);
		}

		Comboitem cbiDestino = cmbParadaDestino.getSelectedItem();
		Parada destino = null;
		if (cbiDestino != null) {
			destino = (Parada) cbiDestino.getValue();
			busquedaExcepcionPeaje.addFilterEqual("destino", destino);
		}
		busquedaExcepcionPeaje.addSortDesc("excepcionPeajeId");

		plwExcepcionPeaje.init(busquedaExcepcionPeaje, excepcionPeajeList, pagingExcepcionPeaje);

		if (excepcionPeajeList.getData().length == 0) {
			try {
				Messagebox.show(Labels.getLabel("MSG.ningunRegistro"),
						Labels.getLabel("busquedaExcepcionPeajeController.window.title"),
						Messagebox.OK, Messagebox.INFORMATION);
			} catch (InterruptedException ex) {
			}
		}
	}
	public void onClick$btnPesquisa(Event ev) throws InterruptedException {
		refreshLista();
	}
	
	public void onClick$btnRefresh(Event ev) throws InterruptedException {
		refreshLista();
	}
}
