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

import java.util.Date;
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 org.zkoss.zul.api.Datebox;

import com.rjconsultores.ventaboletos.entidad.Mensaje;
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.RenderMensaje;

@Controller("busquedaMensajeController")
@Scope("prototype")
public class BusquedaMensajeController extends MyGenericForwardComposer {

	private static final long serialVersionUID = 1L;

	@Autowired
	private transient PagedListWrapper<Mensaje> plwMensaje;

	private MyListbox mensajeList;
	private Paging pagingMensaje;

	private Datebox txtDataInicial;
	private Datebox txtDataFinal;
	private Textbox txtDescricao;

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

		super.doAfterCompose(comp);
		mensajeList.setItemRenderer(new RenderMensaje());

		mensajeList.addEventListener("onDoubleClick", new EventListener() {

			@Override
			public void onEvent(Event event) throws Exception {
				Mensaje mensaje = (Mensaje) mensajeList.getSelected();
				verMensagem(mensaje);
			}
		});

		refreshLista(false);
	}

	@SuppressWarnings({ "rawtypes", "unchecked" })
	private void verMensagem(Mensaje m) {
		if (m == null) {
			return;
		}
		Map args = new HashMap();
		args.put("mensaje", m);
		args.put("mensajeList", mensajeList);
		args.put("busquedaMensajeController", this);

		openWindow("/gui/seguridad/editarMensaje.zul",
				Labels.getLabel("editarMensajeController.window.title"), args, MODAL);

	}

	public void refreshLista(Boolean validade) {
		HibernateSearchObject<Mensaje> sistemaBusqueda = new HibernateSearchObject<Mensaje>(Mensaje.class, pagingMensaje.getPageSize());

		Date dataInicial = txtDataInicial.getValue();
		if (dataInicial != null) {
			sistemaBusqueda.addFilterEqual("fecIni", dataInicial);
		}

		Date dataFinal = txtDataFinal.getValue();
		if (dataFinal != null) {
			sistemaBusqueda.addFilterEqual("fecFin", dataFinal);
		}

		String descricao = txtDescricao.getText();
		if (!descricao.equals("")) {
			sistemaBusqueda.addFilterEqual("descripcion", descricao.trim());
		}

		sistemaBusqueda.addSortDesc("fecIni");
		sistemaBusqueda.addFilterEqual("activo", Boolean.TRUE);

		plwMensaje.init(sistemaBusqueda, mensajeList, pagingMensaje);

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

			}
		}
	}

	public void onClick$btnNovo(Event ev) {
		verMensagem(new Mensaje());
	}

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

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

	public Datebox getTxtDataInicial() {
		return txtDataInicial;
	}

	public void setTxtDataInicial(Datebox txtDataInicial) {
		this.txtDataInicial = txtDataInicial;
	}

	public Datebox getTxtDataFinal() {
		return txtDataFinal;
	}

	public void setTxtDataFinal(Datebox txtDataFinal) {
		this.txtDataFinal = txtDataFinal;
	}

	public Textbox getTxtDescricao() {
		return txtDescricao;
	}

	public void setTxtDescricao(Textbox txtDescricao) {
		this.txtDescricao = txtDescricao;
	}

}
