package com.rjconsultores.ventaboletos.relatorios.utilitarios;

import java.util.ArrayList;
import java.util.Arrays;

import org.zkoss.zul.Paging;

import com.rjconsultores.ventaboletos.web.utilerias.MensagensUtils;
import com.rjconsultores.ventaboletos.web.utilerias.MyListbox;
import com.rjconsultores.ventaboletos.web.utilerias.MyTextbox;
import com.rjconsultores.ventaboletos.web.utilerias.paginacion.HibernateSearchObject;
import com.rjconsultores.ventaboletos.web.utilerias.paginacion.PagedListWrapper;

public abstract class PagedListGenerico<T> {
	
	private static final String MSG_NENHUM_REGISTRO = "MSG.ningunRegistro";

	private Paging paging;
	private MyListbox listBox;
	private MyTextbox txtPesquisa;
	private HibernateSearchObject<T> hibernateSearchObject;

	public PagedListGenerico(MyListbox listBox, MyTextbox txtPesquisa, Paging paging) {
		this.listBox = listBox;
		this.txtPesquisa = txtPesquisa;
		this.paging = paging;
	}
	
	public void buscarDadosPagedList(PagedListWrapper<T> pagedList) {
		buscarDados(pagedList);
	}

	private void buscarDados(PagedListWrapper<T> pagedList) {
		personalizarBusca();
		
		pagedList.init(getHibernateSearchObject(), getListBox(), getPaging());
	}

	protected abstract void personalizarBusca();

	public void limparPesquisaListBox() {
		limparPesquisaListBox(listBox, txtPesquisa);
	}

	public static void limparPesquisaListBox(MyListbox listBox, MyTextbox txtPesquisa) {
		listBox.setData(new ArrayList<Object>());
		txtPesquisa.setText("");
	}
	
	public void validarPagedListSemRegistro(String tituloRelatorio) {
		validarPagedListSemRegistro(listBox, tituloRelatorio);
	}

	public static void validarPagedListSemRegistro(MyListbox listBox, String tituloRelatorio) {
		if (listBox.getData().length == 0) {
			MensagensUtils.showMessageInformation(MSG_NENHUM_REGISTRO, tituloRelatorio);
		}
	}
	
	public static void validarInclusaoLista(Object objeto, MyListbox listBox) {
		if (objeto != null && 
				!Arrays.asList(listBox.getData()).contains(objeto)) {
			listBox.addItemNovo(objeto);
		}
	}
	
	public Paging getPaging() {
		return paging;
	}

	public void setPaging(Paging paging) {
		this.paging = paging;
	}

	public MyListbox getListBox() {
		return listBox;
	}

	public void setListBox(MyListbox listBox) {
		this.listBox = listBox;
	}

	public MyTextbox getTxtPesquisa() {
		return txtPesquisa;
	}

	public void setTxtPesquisa(MyTextbox txtPesquisa) {
		this.txtPesquisa = txtPesquisa;
	}

	public HibernateSearchObject<T> getHibernateSearchObject() {
		return hibernateSearchObject;
	}
	
	public void setHibernateSearchObject(HibernateSearchObject<T> hibernateSearchObject) {
		this.hibernateSearchObject = hibernateSearchObject;
	}
	
}
