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

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.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.Datebox;
import org.zkoss.zul.Intbox;
import org.zkoss.zul.Paging;

import com.rjconsultores.ventaboletos.entidad.Empresa;
import com.rjconsultores.ventaboletos.entidad.TarjetaViaje;
import com.rjconsultores.ventaboletos.service.EmpresaService;
import com.rjconsultores.ventaboletos.service.TarjetaViajeService;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;
import com.rjconsultores.ventaboletos.web.utilerias.MyListbox;
import com.rjconsultores.ventaboletos.web.utilerias.paginacion.PagedListWrapper;
import com.rjconsultores.ventaboletos.web.utilerias.render.RenderTarjetaViaje;

@Controller("busquedaTarjetaViajeController")
@Scope("prototype")
public class BusquedaTarjetaViajeController extends MyGenericForwardComposer {

    @Autowired
    private TarjetaViajeService tarjetaViajeService;
    private MyListbox tarjetaViajeList;
    private Paging pagingTarjetaViaje;
    @Autowired
    private transient PagedListWrapper<TarjetaViaje> plwTarjetaViaje;
    private Datebox fecInicio;
    private Datebox fecFinal;
    private Combobox cmbEmpresa;
    private List<Empresa> lsEmpresa;
    @Autowired
    private EmpresaService empresaService;
    private Intbox autobusIni;
    private Intbox autobusFin;
    private RenderTarjetaViaje render = new RenderTarjetaViaje();

    public Intbox getAutobusIni() {
        return autobusIni;
    }

    public void setAutobusIni(Intbox autobusIni) {
        this.autobusIni = autobusIni;
    }

    public Intbox getAutobusFin() {
        return autobusFin;
    }

    public void setAutobusFin(Intbox autobusFin) {
        this.autobusFin = autobusFin;
    }

    public List<Empresa> getLsEmpresa() {
        return lsEmpresa;
    }

    public void setLsEmpresa(List<Empresa> lsEmpresa) {
        this.lsEmpresa = lsEmpresa;
    }

    public Combobox getCmbEmpresa() {
        return cmbEmpresa;
    }

    public void setCmbEmpresa(Combobox cmbEmpresa) {
        this.cmbEmpresa = cmbEmpresa;
    }

    public Datebox getFecInicio() {
        return fecInicio;
    }

    public void setFecInicio(Datebox fecInicio) {
        this.fecInicio = fecInicio;
    }

    public Datebox getFecFinal() {
        return fecFinal;
    }

    public void setFecFinal(Datebox fecFinal) {
        this.fecFinal = fecFinal;
    }

    public void onClick$btnNovo(Event ev) {
        verTarjetaViaje(new TarjetaViaje());
    }

    @Override
    public void doAfterCompose(Component comp) throws Exception {
        lsEmpresa = empresaService.buscarTodosExceto(UsuarioLogado.getUsuarioLogado().getEmpresa(),0);
        super.doAfterCompose(comp);
        tarjetaViajeList.setItemRenderer(render);
        tarjetaViajeList.addEventListener("onDoubleClick", new EventListener() {

            @Override
            public void onEvent(Event event) throws Exception {
                TarjetaViaje tv = (TarjetaViaje) tarjetaViajeList.getSelected();
                verTarjetaViaje(tv);
            }
        });

        //onClick$btnPesquisa(null);
    }

    public MyListbox getTarjetaViajeList() {
        return tarjetaViajeList;
    }

    public void setTarjetaViajeList(MyListbox tarjetaViajeList) {
        this.tarjetaViajeList = tarjetaViajeList;
    }

    public Paging getPagingTarjetaViaje() {
        return pagingTarjetaViaje;
    }

    public void setPagingTarjetaViaje(Paging pagingTarjetaViaje) {
        this.pagingTarjetaViaje = pagingTarjetaViaje;
    }

    public void onClick$btnRefresh(Event ev) throws InterruptedException {
        this.refreshLista();
    }

    public void onClick$btnPesquisa(Event ev) throws InterruptedException {
        fecInicio.getValue();
        fecFinal.getValue();
        this.refreshLista();
    }

    public void refreshLista() {
        List<TarjetaViaje> ls = null;

        ls = tarjetaViajeService.buscarTarjetaPorFiltros(autobusIni.getValue(), autobusFin.getValue(), fecInicio.getValue(), fecFinal.getValue(), cmbEmpresa.getSelectedItem());
        boolean todasTarjetas = (autobusIni.getValue() != null && autobusFin.getValue() != null) || (fecInicio.getValue() != null && fecFinal.getValue() != null) || cmbEmpresa.getSelectedItem() != null;

        tarjetaViajeService.verificaCorridaDuplicada(ls, !todasTarjetas);

        tarjetaViajeList.setData(ls);

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

    private void verTarjetaViaje(TarjetaViaje tarjeta) {
        if (tarjeta == null) {
            return;
        }
        Map args = new HashMap();
        args.put("tarjetaViaje", tarjeta);
        args.put("tarjetaViajeList", tarjetaViajeList);
        args.put("buesquedaTarjetaController", this);

        openWindow("/gui/pago_conductor/editarTarjetaViaje.zul",
                Labels.getLabel("busquedaTarjetaViajeController.window.title"), args, MODAL);
    }
}
