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

import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang.StringUtils;
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.zul.Combobox;
import org.zkoss.zul.Comboitem;
import org.zkoss.zul.Paging;
import org.zkoss.zul.Textbox;

import com.rjconsultores.ventaboletos.entidad.AbastoCentral;
import com.rjconsultores.ventaboletos.entidad.Aidf;
import com.rjconsultores.ventaboletos.entidad.Empresa;
import com.rjconsultores.ventaboletos.entidad.PuntoVenta;
import com.rjconsultores.ventaboletos.service.AidfService;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxPuntoVenta;
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;

@Controller("busquedaBilhetesController")
@Scope("prototype")
public class BusquedaBilhetesController extends MyGenericForwardComposer {

	
	@Autowired
	private AidfService aidfService;
	
	@Autowired
    private transient PagedListWrapper<AbastoCentral> plwBilhetes;
	private Paging pagingBilhetes;
	
	private MyListbox bilheteList;
	
	private Combobox cmbAidf;
	private List<Aidf> lsAidf;
	
	private Textbox txtForminicial;
	private Textbox txtFormfinal;
	
	private List<PuntoVenta> lsPuntoVenta;
	private MyComboboxPuntoVenta cmbPuntoVenta;
	
	public BusquedaBilhetesController() {
		// TODO Auto-generated constructor stub
	}

	public MyListbox getBilheteList() {
		return bilheteList;
	}

	public void setBilheteList(MyListbox bilheteList) {
		this.bilheteList = bilheteList;
	}

	public Combobox getCmbAidf() {
		return cmbAidf;
	}

	public void setCmbAidf(Combobox cmbAidf) {
		this.cmbAidf = cmbAidf;
	}

	public List<Aidf> getLsAidf() {
		return lsAidf;
	}

	public void setLsAidf(List<Aidf> lsAidf) {
		this.lsAidf = lsAidf;
	}

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

		List<Empresa> lsEmpresas = UsuarioLogado.getUsuarioLogado().getEmpresa();
		lsAidf = aidfService.buscaAidfsPorEmpresas(lsEmpresas);
		setLsPuntoVenta(new ArrayList<PuntoVenta>());
		
		super.doAfterCompose(comp);
		
		bilheteList.setItemRenderer(new BilhetesListitemRenderer());
				
		actualizaBilheteList();
	}
	
	public void onClick$btnPesquisa(Event ev) throws InterruptedException {
		actualizaBilheteList();
	}

	public void onClick$btnRefresh(Event ev) {
		actualizaBilheteList();
	}
	
	private void actualizaBilheteList() {
		HibernateSearchObject<AbastoCentral> bilheteBusqueda =
				new HibernateSearchObject<AbastoCentral>(AbastoCentral.class, pagingBilhetes.getPageSize());

		bilheteBusqueda.addFilterEqual("activo", true);
		bilheteBusqueda.addSortDesc("fecmodif");
		
		Comboitem aidfSeleccionada = cmbAidf.getSelectedItem();
		
		if(aidfSeleccionada != null){
			Aidf aidf = (Aidf) aidfSeleccionada.getValue();
			bilheteBusqueda.addFilterEqual("aidf", aidf);
		}
		
		Comboitem puntoVentaSeleccionada = cmbPuntoVenta.getSelectedItem();
		
		if(puntoVentaSeleccionada != null){
			PuntoVenta puntoVenta = (PuntoVenta) puntoVentaSeleccionada.getValue();
			bilheteBusqueda.addFilterEqual("puntoventa", puntoVenta);
		}
		
		String formInicial = txtForminicial.getValue();
		if(StringUtils.isNotBlank(formInicial))			
			bilheteBusqueda.addFilterGreaterOrEqual("numfoliopreimpreso", formInicial);
		
		String formFinal = txtFormfinal.getValue();
		if(StringUtils.isNotBlank(formFinal))			
			bilheteBusqueda.addFilterLessOrEqual("numfoliopreimpreso", formFinal);
		
		if(aidfSeleccionada != null || puntoVentaSeleccionada != null || StringUtils.isNotBlank(formInicial) || StringUtils.isNotBlank(formFinal)){
			plwBilhetes.init(bilheteBusqueda, bilheteList, pagingBilhetes);
			
			if (bilheteList.getData().length == 0) {
				try {
					Messagebox.show(Labels.getLabel("MSG.ningunRegistro"),
							Labels.getLabel("busquedaBilhetesController.window.title"),
							Messagebox.OK, Messagebox.INFORMATION);
				} catch (InterruptedException ex) {
				}
			}
		}
		
	}

	public Textbox getTxtForminicial() {
		return txtForminicial;
	}

	public void setTxtForminicial(Textbox txtForminicial) {
		this.txtForminicial = txtForminicial;
	}

	public Textbox getTxtFormfinal() {
		return txtFormfinal;
	}

	public void setTxtFormfinal(Textbox txtFormfinal) {
		this.txtFormfinal = txtFormfinal;
	}
	
	public List<PuntoVenta> getLsPuntoVenta() {
		return lsPuntoVenta;
	}


	public void setLsPuntoVenta(List<PuntoVenta> lsPuntoVenta) {
		this.lsPuntoVenta = lsPuntoVenta;
	}

	public MyComboboxPuntoVenta getCmbPuntoVenta() {
		return cmbPuntoVenta;
	}

	public void setCmbPuntoVenta(MyComboboxPuntoVenta cmbPuntoVenta) {
		this.cmbPuntoVenta = cmbPuntoVenta;
	}

}
