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

import java.awt.Button;
import java.util.HashMap;
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.Paging;
import org.zkoss.zul.Textbox;

import com.rjconsultores.ventaboletos.entidad.AgrupamentoParada;
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.RenderCatalogoDeAgrupamentoDeParadas;

@Controller("busquedaCatalogoDeAgruparParadaController")
@Scope("prototype")
public class BusquedaCatalogoDeAgruparParadaController extends MyGenericForwardComposer {

	/**
	 * 
	 */
	private static final long serialVersionUID = -6821209329302163344L;
	@Autowired
	private transient PagedListWrapper<AgrupamentoParada> plwAgrupamentoParada;
	private MyListbox agrupamentoParadaList;
	private Paging pagingAgrupamentoParada;
	private Textbox txtDescAgrupamentoParada;
	private Textbox txtCveAgrupamentoParada;
	private Button btnNovo;
	private Button btnCerrar;

	public PagedListWrapper<AgrupamentoParada> getPlwAgrupamentoParada() {
		return plwAgrupamentoParada;
	}

	public void setPlwAgrupamentoParada(PagedListWrapper<AgrupamentoParada> plwAgrupamentoParada) {
		this.plwAgrupamentoParada = plwAgrupamentoParada;
	}

	public MyListbox getAgrupamentoParadaList() {
		return agrupamentoParadaList;
	}

	public void setAgrupamentoParadaList(MyListbox agrupamentoParadaList) {
		this.agrupamentoParadaList = agrupamentoParadaList;
	}

	public Paging getPagingAgrupamentoParada() {
		return pagingAgrupamentoParada;
	}

	public void setPagingAgrupamentoParada(Paging pagingAgrupamentoParada) {
		this.pagingAgrupamentoParada = pagingAgrupamentoParada;
	}

	public Textbox getTxtDescAgrupamentoParada() {
		return txtDescAgrupamentoParada;
	}

	public void setTxtDescAgrupamentoParada(Textbox txtDescAgrupamentoParada) {
		this.txtDescAgrupamentoParada = txtDescAgrupamentoParada;
	}

	public Textbox getTxtCveAgrupamentoParada() {
		return txtCveAgrupamentoParada;
	}

	public void setTxtCveAgrupamentoParada(Textbox txtCveAgrupamentoParada) {
		this.txtCveAgrupamentoParada = txtCveAgrupamentoParada;
	}

	public Button getBtnNovo() {
		return btnNovo;
	}

	public void setBtnNovo(Button btnNovo) {
		this.btnNovo = btnNovo;
	}

	public Button getBtnCerrar() {
		return btnCerrar;
	}

	public void setBtnCerrar(Button btnCerrar) {
		this.btnCerrar = btnCerrar;
	}

	public void onClick$btnPesquisa(Event ev) throws InterruptedException {
		refreshLista();
	}

	public void onClick$btnRefresh(Event ev) {
		refreshLista();
	}

	public void onClick$btnNovo(Event ev) {
		verPeriodo(new AgrupamentoParada());
	}

	private void refreshLista() {
		HibernateSearchObject<AgrupamentoParada> agrupamentoParada = new HibernateSearchObject<AgrupamentoParada>(AgrupamentoParada.class, pagingAgrupamentoParada.getPageSize());

		agrupamentoParada.addFilterLike("descAgrupamentoParada", "%" + txtDescAgrupamentoParada.getText().trim().concat("%"));
		agrupamentoParada.addFilterLike("cveAgrupamentoParada", "%" + txtCveAgrupamentoParada.getText().trim().concat("%"));

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

		agrupamentoParada.addFilterNotEqual("agrupamentoParadaId", -1);

		agrupamentoParada.addSortAsc("descAgrupamentoParada");

		plwAgrupamentoParada.init(agrupamentoParada, agrupamentoParadaList, pagingAgrupamentoParada);

		if (agrupamentoParadaList.getData().length == 0) {
			try {
				Messagebox.show(Labels.getLabel("MSG.ningunRegistro"), Labels.getLabel("busquedaCatalogoDeAgrupamentoParadaController.window.title"), Messagebox.OK, Messagebox.INFORMATION);
			} catch (InterruptedException ex) {
			}
		}
	}

	private void verPeriodo(AgrupamentoParada c) {
		if (c == null) {
			return;
		}
		Map args = new HashMap();
		args.put("agrupamentoParada", c);
		args.put("agrupamentoParadaList", agrupamentoParadaList);

		openWindow("/gui/esquema_operacional/editarAgruparParada.zul", Labels.getLabel("editarCatalogoDeAgruparParadaController.window.title"), args, MODAL);
	}

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

		agrupamentoParadaList.setItemRenderer(new RenderCatalogoDeAgrupamentoDeParadas());
		agrupamentoParadaList.addEventListener("onDoubleClick", new EventListener() {

			@Override
			public void onEvent(Event event) throws Exception {
				AgrupamentoParada c = (AgrupamentoParada) agrupamentoParadaList.getSelected();
				verPeriodo(c);
			}
		});

		txtDescAgrupamentoParada.focus();
		refreshLista();
	}

}
