/**
 * 
 */
package com.rjconsultores.ventaboletos.web.gui.controladores.tarifas;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.log4j.Logger;
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.Combobox;
import org.zkoss.zul.Comboitem;
import org.zkoss.zul.Intbox;
import org.zkoss.zul.Paging;

import com.rjconsultores.ventaboletos.entidad.Parada;
import com.rjconsultores.ventaboletos.entidad.PrecioVentaja;
import com.rjconsultores.ventaboletos.entidad.Ruta;
import com.rjconsultores.ventaboletos.service.CorridaService;
import com.rjconsultores.ventaboletos.service.ParadaService;
import com.rjconsultores.ventaboletos.service.RutaService;
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.RenderPrecioVentaja;

/**
 * @author Thiago
 *
 */
@Controller("busquedaPrecioVentajaController")
@Scope("prototype")
public class BusquedaPrecioVentajaController extends MyGenericForwardComposer {

	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	@Autowired
    private transient PagedListWrapper<PrecioVentaja> plwPrecioVentaja;
    private Paging pagingPrecioVentaja;
    
    private static Logger log = Logger.getLogger(BusquedaPrecioVentajaController.class);
	
	@Autowired
	private RutaService rutaService;
	@Autowired
	private CorridaService corridaService;
	@Autowired
    private ParadaService paradaService;	
	
	
	private MyListbox precioVentajaList;

	private Combobox cmbOrigem;
	private Combobox cmbDestino;
	private Intbox itxCorrida;
	private List<Ruta> lsRuta;
	private Combobox cmbRuta;	
	
	/**
	 * @return the precioVentajaList
	 */
	public MyListbox getPrecioVentajaList() {
		return precioVentajaList;
	}
	/**
	 * @param precioVentajaList the precioVentajaList to set
	 */
	public void setPrecioVentajaList(MyListbox precioVentajaList) {
		this.precioVentajaList = precioVentajaList;
	}
	
	
	public Combobox getCmbOrigem() {
		return cmbOrigem;
	}
	public void setCmbOrigem(Combobox cmbOrigem) {
		this.cmbOrigem = cmbOrigem;
	}
	public Combobox getCmbDestino() {
		return cmbDestino;
	}
	public void setCmbDestino(Combobox cmbDestino) {
		this.cmbDestino = cmbDestino;
	}
	public Intbox getItxCorrida() {
		return itxCorrida;
	}
	public void setItxCorrida(Intbox itxCorrida) {
		this.itxCorrida = itxCorrida;
	}

	@Override
	public void doAfterCompose(Component comp) throws Exception {
		super.doAfterCompose(comp);
		lsRuta = rutaService.obtenerTodos();
		precioVentajaList.setItemRenderer(new RenderPrecioVentaja());
		precioVentajaList.addEventListener("onDoubleClick", new EventListener() {

            @Override
            public void onEvent(Event event) throws Exception {
                PrecioVentaja precioVentaja = (PrecioVentaja) precioVentajaList.getSelected();
                verPrecioVentaja(precioVentaja);
            }
        });
		refreshLista();
	}
	
	public void onClick$btnNovo(){
		verPrecioVentaja(new PrecioVentaja());
	}
	
	private void verPrecioVentaja(PrecioVentaja precioVentaja) {
        if (precioVentaja == null) {
            return;
        }

        Map args = new HashMap();
        args.put("precioVentaja", precioVentaja);
        args.put("precioVentajaList", precioVentajaList);

        openWindow("/gui/tarifas/editarPrecioVentaja.zul",
                Labels.getLabel("editarPrecioVentajaController.window.title"), args, MODAL);
    }
	
	 public void onClick$btnPesquisa(Event ev) throws InterruptedException {
	        refreshLista();
	   }
	 
	private void refreshLista() {
		 Parada origem = (Parada) (cmbOrigem.getSelectedItem() != null ? cmbOrigem.getSelectedItem().getValue() : null);
	     Parada destino = (Parada) (cmbDestino.getSelectedItem() != null ? cmbDestino.getSelectedItem().getValue() : null);
	     Integer corridaId = itxCorrida.getValue() != null ? itxCorrida.getValue()  : null;
	     Ruta ruta;
	     Comboitem cbiRuta = cmbRuta.getSelectedItem();	
	     ruta = cbiRuta != null ?  (Ruta)cbiRuta.getValue() : null;
	     
	     HibernateSearchObject<PrecioVentaja> precioVentajaBusqueda =
	                new HibernateSearchObject<PrecioVentaja>(PrecioVentaja.class, pagingPrecioVentaja.getPageSize());
	        precioVentajaBusqueda.addFilterEqual("activo", Boolean.TRUE);

	        if(origem!=null){
	        	precioVentajaBusqueda.addFilterEqual("origenPrecioId", origem);
	        }
	        if(destino!=null){
	        	precioVentajaBusqueda.addFilterEqual("destinoPrecioId", destino);
	        }
	        if(ruta != null){
	        	precioVentajaBusqueda.addFilterEqual("rutaPrecioId", ruta);
	        }
	        if(corridaId!= null){
	        	precioVentajaBusqueda.addFilterEqual("corridaId", corridaId);
	        }
	        
	        plwPrecioVentaja.init(precioVentajaBusqueda, precioVentajaList, pagingPrecioVentaja);
	        if (precioVentajaList.getData().length == 0) {
	            try {
	                Messagebox.show(Labels.getLabel("busquedaPrecioVentajaController.MSG.ningunRegistro"),
	                        Labels.getLabel("editarPrecioVentajaController.window.title"),
	                        Messagebox.OK, Messagebox.INFORMATION);
	            } catch (InterruptedException ex) {
	            	log.error(ex);
	            }
	        }
	}
	
    public void onClick$btnRefresh(Event ev) {
        refreshLista();
    }
	
	public List<Ruta> getLsRuta() {
		return lsRuta;
	}
	public void setLsRuta(List<Ruta> lsRuta) {
		this.lsRuta = lsRuta;
	}
	public Combobox getCmbRuta() {
		return cmbRuta;
	}
	public void setCmbRuta(Combobox cmbRuta) {
		this.cmbRuta = cmbRuta;
	}	     
		
}