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

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.zk.ui.Component;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zul.Comboitem;
import org.zkoss.zul.Messagebox;
import org.zkoss.zul.Paging;

import com.rjconsultores.ventaboletos.entidad.AliasClasse;
import com.rjconsultores.ventaboletos.entidad.ClaseServicio;
import com.rjconsultores.ventaboletos.entidad.OrgaoConcedente;
import com.rjconsultores.ventaboletos.service.ClaseServicioService;
import com.rjconsultores.ventaboletos.service.OrgaoConcedenteService;
import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxEstandar;
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.RenderAliasClasse;

@Controller("busquedaAliasClasseController")
@Scope("prototype")
public class BusquedaAliasClasseController extends MyGenericForwardComposer {

	private static final long serialVersionUID = 1L;
	@Autowired
	private transient PagedListWrapper<AliasClasse> plwAliasClasse;
	
	@Autowired
    private ClaseServicioService claseServicioService;
	
	@Autowired
	private OrgaoConcedenteService orgaoConcedenteService;
	
	private List<ClaseServicio> lsClasse;
	private List<OrgaoConcedente> lsOrgaoConcedente;
	
	private MyListbox aliasClasseList;
	private Paging pagingAliasClasse;
	
	private MyComboboxEstandar cmbClasse;
	private MyComboboxEstandar cmbAlias;
	private MyComboboxEstandar cmbOrgaoConcedente;

	@Override
	public void doAfterCompose(Component comp) throws Exception {
		
		super.doAfterCompose(comp);
		
		lsClasse = claseServicioService.buscarTodosExceto(-1);
		lsOrgaoConcedente = orgaoConcedenteService.obtenerTodos();

		aliasClasseList.setItemRenderer(new RenderAliasClasse());
		aliasClasseList.addEventListener("onDoubleClick", new EventListener() {

			@Override
			public void onEvent(Event event) throws Exception {
				AliasClasse as = (AliasClasse) aliasClasseList.getSelected();
				verAliasClasse(as);
			}
		});

		refreshLista();
	}

	@SuppressWarnings({ "rawtypes", "unchecked" })
	private void verAliasClasse(AliasClasse ac) {
		if (ac == null) {
			return;
		}

		Map args = new HashMap();
		args.put("aliasClasse", ac);
		args.put("aliasClasseList", aliasClasseList);

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

	private void refreshLista() {
		
		HibernateSearchObject<AliasClasse> aliasClasseBusqueda =
				new HibernateSearchObject<AliasClasse>(AliasClasse.class, pagingAliasClasse.getPageSize());

		aliasClasseBusqueda.addFilterEqual("activo", true);	
		
		Comboitem cbiClasse = cmbClasse.getSelectedItem();
		if (cbiClasse != null) {
			ClaseServicio classeI = (ClaseServicio) cbiClasse.getValue();
			aliasClasseBusqueda.addFilterEqual("classe", classeI);
		}
		
		Comboitem cbiAlias = cmbAlias.getSelectedItem();
		if (cbiAlias != null) {
			ClaseServicio aliasI = (ClaseServicio) cbiAlias.getValue();
			aliasClasseBusqueda.addFilterEqual("alias", aliasI);
		}
		
		Comboitem cbiOrgao = cmbOrgaoConcedente.getSelectedItem();
		if (cbiOrgao != null) {
			OrgaoConcedente orgaoI = (OrgaoConcedente) cbiOrgao.getValue();
			aliasClasseBusqueda.addFilterEqual("orgaoConcedente", orgaoI);
		}

		aliasClasseBusqueda.addSortAsc("aliasClasseId");

		plwAliasClasse.init(aliasClasseBusqueda, aliasClasseList, pagingAliasClasse);

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

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

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

	public void onClick$btnNovo(Event ev) {
		verAliasClasse( new AliasClasse());
	}

	public List<ClaseServicio> getLsClasse() {
		return lsClasse;
	}

	public void setLsClasse(List<ClaseServicio> lsClasse) {
		this.lsClasse = lsClasse;
	}

	public List<OrgaoConcedente> getLsOrgaoConcedente() {
		return lsOrgaoConcedente;
	}

	public void setLsOrgaoConcedente(List<OrgaoConcedente> lsOrgaoConcedente) {
		this.lsOrgaoConcedente = lsOrgaoConcedente;
	}

	public MyComboboxEstandar getCmbClasse() {
		return cmbClasse;
	}

	public void setCmbClasse(MyComboboxEstandar cmbClasse) {
		this.cmbClasse = cmbClasse;
	}

	public MyComboboxEstandar getCmbAlias() {
		return cmbAlias;
	}

	public void setCmbAlias(MyComboboxEstandar cmbAlias) {
		this.cmbAlias = cmbAlias;
	}

	public MyComboboxEstandar getCmbOrgaoConcedente() {
		return cmbOrgaoConcedente;
	}

	public void setCmbOrgaoConcedente(MyComboboxEstandar cmbOrgaoConcedente) {
		this.cmbOrgaoConcedente = cmbOrgaoConcedente;
	}
}
