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

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

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

import com.rjconsultores.ventaboletos.entidad.Parada;
import com.rjconsultores.ventaboletos.entidad.Via;
import com.rjconsultores.ventaboletos.service.ViaService;
import com.rjconsultores.ventaboletos.web.gui.componente.esquemaoperacional.GridRutaTramo;
import com.rjconsultores.ventaboletos.web.gui.componente.esquemaoperacional.ParadaExisteException;
import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxParada;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;

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

	private static final long serialVersionUID = 1L;
	@Autowired
	private ViaService viaService;
	private GridRutaTramo gridRutaSecuencia;
	private MyComboboxParada cmbParadaOrigen;
	private MyComboboxParada cmbParadaDestino;
	private Combobox cmbVia;
	private List<Via> lsVias;
	private Parada origen;
	public static Via via;

	@Override
	public void doAfterCompose(Component comp) throws Exception {
		
		lsVias = viaService.obtenerTodos();		
		
		gridRutaSecuencia = (GridRutaTramo) Executions.getCurrent().getArg().get("gridRutaSecuencia");
		origen = (Parada) Executions.getCurrent().getArg().get("origen");	
		super.doAfterCompose(comp);

		if (origen != null) {
			List<Parada> lsOrigen = new ArrayList<Parada>();
			lsOrigen.add(origen);
			ListModelList listModelList = new ListModelList(lsOrigen);
			listModelList.addSelection(origen);
			cmbParadaOrigen.setModel(listModelList);
			cmbParadaOrigen.setDisabled(true);
			cmbParadaDestino.setFocus(true);
		} else {
			cmbParadaOrigen.setConstraint("no empty");
			cmbParadaOrigen.setFocus(true);
		}
	}
	
	public void doFinally() throws Exception {
		super.doFinally();
	}

	private void validar() {
		if (cmbParadaOrigen.getSelectedItem() == null) {
			throw new WrongValueException(cmbParadaOrigen, Labels.getLabel("MSG.necesita.origen"));
		}
		if (cmbParadaDestino.getSelectedItem() == null) {
			throw new WrongValueException(cmbParadaDestino, Labels.getLabel("MSG.necesita.destino"));
		}
		if (cmbVia.getSelectedItem() == null) {
			throw new WrongValueException(cmbVia, Labels.getLabel("MSG.necesita.via"));
		}
	}

	public void onClick$btnSalvar(Event e) throws InterruptedException {

		validar();

		try {
			
			if(gridRutaSecuencia.isPrimeiraVia()) {
				via = (Via) cmbVia.getSelectedItem().getValue();
			}
			
			gridRutaSecuencia.agregarSecuencia((Parada) cmbParadaOrigen.getSelectedItem().getValue(), (Parada) cmbParadaDestino
					.getSelectedItem().getValue(), (Via) cmbVia.getSelectedItem().getValue());

		} catch (IllegalArgumentException e1) {
			Messagebox.show(e1.getMessage(),
					Labels.getLabel("nuevaParadaController.window.title"), Messagebox.OK, Messagebox.EXCLAMATION);
		} catch (ParadaExisteException e1) {
			Messagebox.show(e1.getMessage(),
					Labels.getLabel("nuevaParadaController.window.title"), Messagebox.OK, Messagebox.EXCLAMATION);
		}
		
		gridRutaSecuencia.setPrimeiraVia(false);
		this.closeWindow();
	}

	public List<Via> getLsVias() {
		return lsVias;
	}

	public ViaService getViaService() {
		return viaService;
	}

	public void setViaService(ViaService viaService) {
		this.viaService = viaService;
	}

	public GridRutaTramo getGridRutaSecuencia() {
		return gridRutaSecuencia;
	}

	public void setGridRutaSecuencia(GridRutaTramo gridRutaSecuencia) {
		this.gridRutaSecuencia = gridRutaSecuencia;
	}

	public MyComboboxParada getCmbParadaOrigen() {
		return cmbParadaOrigen;
	}

	public void setCmbParadaOrigen(MyComboboxParada cmbParadaOrigen) {
		this.cmbParadaOrigen = cmbParadaOrigen;
	}

	public MyComboboxParada getCmbParadaDestino() {
		return cmbParadaDestino;
	}

	public void setCmbParadaDestino(MyComboboxParada cmbParadaDestino) {
		this.cmbParadaDestino = cmbParadaDestino;
	}

	public Combobox getCmbVia() {
		return cmbVia;
	}

	public void setCmbVia(Combobox cmbVia) {
		this.cmbVia = cmbVia;
	}

	public Parada getOrigen() {
		return origen;
	}

	public void setOrigen(Parada origen) {
		this.origen = origen;
	}

	public Via getVia() {
		return via;
	}

	public void setVia(Via via) {
		this.via = via;
	}

	public void setLsVias(List<Via> lsVias) {
		this.lsVias = lsVias;
	}
	
	
}
