/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.rjconsultores.ventaboletos.web.gui.controladores.esquemaoperacional;

import java.util.Calendar;
import java.util.Date;
import java.util.List;

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.Executions;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zul.Button;
import org.zkoss.zul.Combobox;
import org.zkoss.zul.Textbox;

import com.rjconsultores.ventaboletos.entidad.Autobus;
import com.rjconsultores.ventaboletos.entidad.AutobusDoc;
import com.rjconsultores.ventaboletos.entidad.Ciudad;
import com.rjconsultores.ventaboletos.entidad.ClaseServicio;
import com.rjconsultores.ventaboletos.entidad.DiagramaAutobus;
import com.rjconsultores.ventaboletos.entidad.Empresa;
import com.rjconsultores.ventaboletos.entidad.MarcaAutobus;
import com.rjconsultores.ventaboletos.entidad.TipoDocAutobus;
import com.rjconsultores.ventaboletos.service.AutobusDocService;
import com.rjconsultores.ventaboletos.service.AutobusService;
import com.rjconsultores.ventaboletos.service.CiudadService;
import com.rjconsultores.ventaboletos.service.ClaseServicioService;
import com.rjconsultores.ventaboletos.service.CorridaService;
import com.rjconsultores.ventaboletos.service.DiagramaAutobusService;
import com.rjconsultores.ventaboletos.service.EmpresaService;
import com.rjconsultores.ventaboletos.service.MarcaAutobusService;
import com.rjconsultores.ventaboletos.service.TipoDocAutobusService;
import com.rjconsultores.ventaboletos.utilerias.UsuarioLogado;
import com.rjconsultores.ventaboletos.web.utilerias.MyDatebox;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;
import com.rjconsultores.ventaboletos.web.utilerias.MyListbox;
import com.rjconsultores.ventaboletos.web.utilerias.render.RenderAutobusDoc;

/**
 *
 * @author Administrador
 */
@Controller("editarAutobusController")
@Scope("prototype")
public class EditarAutobusController extends MyGenericForwardComposer {

	private static final long serialVersionUID = 1L;

	@Autowired
    private AutobusService autobusService;
    @Autowired
    private AutobusDocService autobusDocService;
    @Autowired
    private DiagramaAutobusService diagramaAutobusService;
    @Autowired
    private CorridaService corridaService;
    @Autowired
    private MarcaAutobusService marcaAutobusService;
    @Autowired
    private ClaseServicioService claseServicioService;
    @Autowired
    private CiudadService ciudadService;
    @Autowired
    private TipoDocAutobusService tipoDocAutobusService;
    @Autowired
    private EmpresaService empresaService;
    
    private List<DiagramaAutobus> lsDiagramaAutobus;
    private List<Ciudad> lsCiudad;
    private List<ClaseServicio> lsClaseServicio;
    private List<MarcaAutobus> lsMarcas;
    private List<TipoDocAutobus> lsTipoDocAutobus;
    private List<Empresa> lsEmpresas;
    private Autobus autobus;
    private MyListbox autobusList;
    private MyListbox docsList;
    private MyDatebox fecCaducidad;
    private Textbox txtNome;
    private Textbox txtNumvagon;
    private Combobox cmbDiagramaAutobus;
    private Combobox cmbDiagramaAutobusPiso;
    private Combobox cmbTipoDocAutobus;
    private Combobox cmbMarcas;
    private Combobox cmbClaseServicio;
    private Combobox cmbCiudad;
    private Combobox cmbEmpresas;
    private Button btnApagar;
    private static Logger log = Logger.getLogger(EditarAutobusController.class);

    public Autobus getAutobus() {
        return autobus;
    }

    public void setAutobus(Autobus autobus) {
        this.autobus = autobus;
    }

    public Button getBtnApagar() {
        return btnApagar;
    }

    public void setBtnApagar(Button btnApagar) {
        this.btnApagar = btnApagar;
    }

    public List<DiagramaAutobus> getLsDiagramaAutobus() {
        return lsDiagramaAutobus;
    }

    public void setLsDiagramaAutobus(List<DiagramaAutobus> lsDiagramaAutobus) {
        this.lsDiagramaAutobus = lsDiagramaAutobus;
    }

    public Textbox getTxtNome() {
        return txtNome;
    }

    public void setTxtNome(Textbox txtNome) {
        this.txtNome = txtNome;
    }

    public Combobox getCmbDiagramaAutobus() {
        return cmbDiagramaAutobus;
    }

    public void setCmbDiagramaAutobus(Combobox cmbDiagramaAutobus) {
        this.cmbDiagramaAutobus = cmbDiagramaAutobus;
    }

    public List<Ciudad> getLsCiudad() {
		return lsCiudad;
	}

	public void setLsCiudad(List<Ciudad> lsCiudad) {
		this.lsCiudad = lsCiudad;
	}

	public List<ClaseServicio> getLsClaseServicio() {
		return lsClaseServicio;
	}

	public void setLsClaseServicio(List<ClaseServicio> lsClaseServicio) {
		this.lsClaseServicio = lsClaseServicio;
	}

	public List<MarcaAutobus> getLsMarcas() {
		return lsMarcas;
	}

	public void setLsMarcas(List<MarcaAutobus> lsMarcas) {
		this.lsMarcas = lsMarcas;
	}

	public List<TipoDocAutobus> getLsTipoDocAutobus() {
		return lsTipoDocAutobus;
	}

	public void setLsTipoDocAutobus(List<TipoDocAutobus> lsTipoDocAutobus) {
		this.lsTipoDocAutobus = lsTipoDocAutobus;
	}

	public List<Empresa> getLsEmpresas() {
		return lsEmpresas;
	}

	public void setLsEmpresas(List<Empresa> lsEmpresas) {
		this.lsEmpresas = lsEmpresas;
	}

	@Override
    public void doAfterCompose(Component comp) throws Exception {
        lsDiagramaAutobus = diagramaAutobusService.obtenerTodos();
        lsCiudad = ciudadService.obtenerTodos();
        lsClaseServicio = claseServicioService.obtenerTodos();
        lsMarcas = marcaAutobusService.obtenerTodos();
        lsTipoDocAutobus = tipoDocAutobusService.obtenerTodos();
        lsEmpresas = empresaService.obtenerTodos();
        
        autobus = (Autobus) Executions.getCurrent().getArg().get("autobus");
        autobusList = (MyListbox) Executions.getCurrent().getArg().get("autobusList");
        
        super.doAfterCompose(comp);
        
        docsList.setItemRenderer(new RenderAutobusDoc());
        
        if (autobus.getAutobusId() != null){
        	autobus.setAutobusDocList(autobusDocService.obtenerPorAutobus(autobus));
        	docsList.setData(autobus.getAutobusDocList());
        }
        		
        txtNome.focus();

        if (autobus.getAutobusId() == null) {
            btnApagar.setVisible(Boolean.FALSE);
        }
    }

	public void onClick$btnAddDoc(Event ev) throws InterruptedException {
		Date fec = fecCaducidad.getValue();
		AutobusDoc doc = new AutobusDoc();
		doc.setAutobus(autobus);
		doc.setFechaCaducidad(fec);
		doc.setTipoDocAutobus((TipoDocAutobus)cmbTipoDocAutobus.getSelectedItem().getValue());
		doc.setActivo(Boolean.TRUE);
		doc.setFecmodif(Calendar.getInstance().getTime());
		doc.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
		
		docsList.addItemNovo(doc);
    }
	
	public void onClick$btnRemDoc(Event ev) throws InterruptedException {
		AutobusDoc doc = (AutobusDoc) docsList.getSelected();
		docsList.removeSelectedItem();
		
		if (doc.getAutobusDocId() != null) {
			doc.setFecmodif(Calendar.getInstance().getTime());
			doc.setActivo(Boolean.FALSE);
			doc.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());

			docsList.addItemNovo(doc);
		}
    }
	
    public void onClick$btnSalvar(Event ev) throws InterruptedException {
        txtNome.getValue();
        txtNumvagon.getValue();
        cmbDiagramaAutobus.getSelectedItem();

        try {
            autobus.setActivo(Boolean.TRUE);
            autobus.setFecmodif(Calendar.getInstance().getTime());
            autobus.setUsuarioId(UsuarioLogado.getUsuarioLogado().getUsuarioId());
            autobus.setEmpresa(cmbEmpresas.getSelectedItem() == null ? null : (Empresa)cmbEmpresas.getSelectedItem().getValue());
            autobus.setMarcaAutobus(cmbMarcas.getSelectedItem() == null ? null : (MarcaAutobus)cmbMarcas.getSelectedItem().getValue());
            autobus.setCiudad(cmbCiudad.getSelectedItem() == null ? null : (Ciudad)cmbCiudad.getSelectedItem().getValue());
            autobus.setClaseServicio(cmbClaseServicio.getSelectedItem() == null ? null : (ClaseServicio)cmbClaseServicio.getSelectedItem().getValue());
            autobus.setDiagramaAutobusPiso(cmbDiagramaAutobusPiso.getSelectedItem() == null ? null : (DiagramaAutobus)cmbDiagramaAutobusPiso.getSelectedItem().getValue());

            autobus.setAutobusDocList(docsList.getListData());
            List<Autobus> lsAutobus =
                    autobusService.buscar(autobus.getNumautobus(),
                    autobus.getDiagramaAutobus());

            boolean podeSalvar = false;
            if (lsAutobus.isEmpty()) {
                podeSalvar = true;
            } else {
                if (autobus.getAutobusId() != null) {
                    for (Autobus c : lsAutobus) {
                        if (c.getAutobusId().equals(autobus.getAutobusId())) {
                            podeSalvar = true;
                        }
                    }
                }
            }
            if (!podeSalvar) {

                Messagebox.show(
                        Labels.getLabel("MSG.Registro.Existe"),
                        Labels.getLabel("editarAutobusController.window.title"),
                        Messagebox.OK, Messagebox.EXCLAMATION);
            } else {
                if (autobus.getAutobusId() == null) {
                    autobusService.suscribir(autobus);
                    autobusList.addItem(autobus);
                } else {
                    autobusService.actualizacion(autobus);
                    autobusList.updateItem(autobus);
                }

                Messagebox.show(
                        Labels.getLabel("editarAutobusController.MSG.suscribirOK"),
                        Labels.getLabel("editarAutobusController.window.title"),
                        Messagebox.OK, Messagebox.INFORMATION);

                closeWindow();
            }
        } catch (Exception ex) {
            log.error("editarAutobusController: " + ex);
            Messagebox.show(
                    Labels.getLabel("MSG.Error"),
                    Labels.getLabel("editarAutobusController.window.title"),
                    Messagebox.OK, Messagebox.ERROR);
        }
    }

    public void onClick$btnApagar(Event ev) {
        try {
            int resp = Messagebox.show(
                    Labels.getLabel("editarAutobusController.MSG.borrarPergunta"),
                    Labels.getLabel("editarAutobusController.window.title"),
                    Messagebox.YES | Messagebox.NO, Messagebox.QUESTION);

            if (resp == Messagebox.YES) {

                if ((corridaService.buscarPorAutobusCorridasFuturas(autobus.getDiagramaAutobus()).isEmpty()) && 
                		(corridaService.buscarPorRolOperativoCorridasFuturas(autobus.getDiagramaAutobus()).isEmpty())) {

                    autobusService.borrar(autobus);

                    Messagebox.show(
                            Labels.getLabel("editarAutobusController.MSG.borrarOK"),
                            Labels.getLabel("editarAutobusController.window.title"),
                            Messagebox.OK, Messagebox.INFORMATION);

                    autobusList.removeItem(autobus);

                    closeWindow();
                } else {
                    Messagebox.show(
                            Labels.getLabel("editarDiagramaAutobusController.MSG.Corrida.Futura"),
                            Labels.getLabel("editarDiagramaAutobusController.window.title"),
                            Messagebox.OK, Messagebox.EXCLAMATION);
                }
            }
        } catch (Exception ex) {
            log.error(ex);
        }
    }

	public Textbox getTxtNumvagon() {
		return txtNumvagon;
	}

	public void setTxtNumvagon(Textbox txtNumvagon) {
		this.txtNumvagon = txtNumvagon;
	}
}
