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

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Arrays;
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.zk.ui.Component;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.event.Event;
import org.zkoss.zk.ui.event.EventListener;
import org.zkoss.zul.Button;
import org.zkoss.zul.Checkbox;
import org.zkoss.zul.Combobox;
import org.zkoss.zul.Comboitem;
import org.zkoss.zul.Decimalbox;
import org.zkoss.zul.Intbox;
import org.zkoss.zul.Label;
import org.zkoss.zul.Messagebox;
import org.zkoss.zul.Textbox;

import com.rjconsultores.ventaboletos.entidad.Conexion;
import com.rjconsultores.ventaboletos.entidad.ConexionConf;
import com.rjconsultores.ventaboletos.entidad.ConexionCtrl;
import com.rjconsultores.ventaboletos.entidad.ConexionExcepcion;
import com.rjconsultores.ventaboletos.entidad.Parada;
import com.rjconsultores.ventaboletos.service.ConexionConfService;
import com.rjconsultores.ventaboletos.service.ConexionCtrlService;
import com.rjconsultores.ventaboletos.service.ConexionExcepcionService;
import com.rjconsultores.ventaboletos.service.ConexionService;
import com.rjconsultores.ventaboletos.service.ParadaService;
import com.rjconsultores.ventaboletos.vo.conexion.ConexionVO;
import com.rjconsultores.ventaboletos.web.utilerias.MyComboboxParada;
import com.rjconsultores.ventaboletos.web.utilerias.MyGenericForwardComposer;
import com.rjconsultores.ventaboletos.web.utilerias.MyListbox;
import com.rjconsultores.ventaboletos.web.utilerias.MyTextbox;
import com.rjconsultores.ventaboletos.web.utilerias.render.RenderConexionExcepcion;
import com.rjconsultores.ventaboletos.web.utilerias.render.RenderEditarConexion;

@Controller("editarConexionController")
@Scope("prototype")
public class EditarConexionController extends MyGenericForwardComposer {

	private static final long serialVersionUID = 1L;
	private static Logger log = Logger.getLogger(EditarConexionController.class);
	@Autowired
	private ConexionExcepcionService conexionExcepcionService;
	@Autowired
	private ConexionService conexionService;
	@Autowired
	private ConexionCtrlService conexionCtrlService;
	@Autowired
	private ConexionConfService conexionConfService;
	@Autowired
	private ParadaService paradaService;
	private MyListbox conexionesEditarList;
	private MyListbox conexionesList;
	private MyListbox conexionExcepcionList;
	private MyComboboxParada cmbOrigemInicial;
	private MyComboboxParada cmbDestinoFinal;
	private MyComboboxParada cmbOrigemConexaoPasso1;
	private MyComboboxParada cmbDestinoConexaoPasso1;
	private MyComboboxParada cmbOrigemConexaoPasso2;
	private MyComboboxParada cmbDestinoConexaoPasso2;
	private MyComboboxParada cmbOrigemConexaoPasso3;
	private MyComboboxParada cmbDestinoConexaoPasso3;
	private MyComboboxParada cmbOrigemConexaoPasso4;
	private MyComboboxParada cmbDestinoConexaoPasso4;
	private Intbox txtTiempoMin;
	private Intbox txtTiempoMax;
	private Decimalbox txtPorSec1;
	private Decimalbox txtPorSec2;
	private Decimalbox txtPorSec3;
	private Decimalbox txtPorSec4;
	private List<Conexion> lsConexiones;
	private List<ConexionConf> lsConexionesConf;
	private Integer grupo;
	private ConexionCtrl conexionCtrl;
	private Button btnApagar;
	private ConexionExcepcion conexionExcepcion;
	private Textbox txtConexaoFixa1;
	private Checkbox chkConFix;
	private Label lblConexaoFixa1;
	private Textbox txtConexaoFixa2;
	private Label lblConexaoFixa2;
	private Textbox txtConexaoFixa3;
	private Label lblConexaoFixa3;
	private Textbox txtConexaoFixa4;
	private Label lblConexaoFixa4;

	public ConexionCtrl getConexionCtrl() {
		return conexionCtrl;
	}

	public void setConexionCtrl(ConexionCtrl conexionCtrl) {
		this.conexionCtrl = conexionCtrl;
	}

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

		conexionesList = (MyListbox) Executions.getCurrent().getArg().get("conexionesList");

		conexionesEditarList.setItemRenderer(new RenderEditarConexion());
		conexionesEditarList.addEventListener("onDoubleClick", new EventListener() {

			@Override
			public void onEvent(Event event) throws Exception {
				verConfiguracaoConexao();
			}
		});

		lsConexiones = new ArrayList<Conexion>();
		lsConexionesConf = new ArrayList<ConexionConf>();
		grupo = 0;

		Long conexionCtrlId = (Long) Executions.getCurrent().getArg().get("conexionCtrlId");
		if (conexionCtrlId != null) {
			conexionCtrl = conexionCtrlService.obtenerID(conexionCtrlId);

			Parada origemInicial = paradaService.obtenerID(conexionCtrl.getOrigenId());
			cmbOrigemInicial.setInitialValue(origemInicial);
			cmbOrigemInicial.setDisabled(Boolean.TRUE);
			cmbOrigemConexaoPasso1.setInitialValue(origemInicial);

			Parada destinoFinal = paradaService.obtenerID(conexionCtrl.getDestinoId());
			cmbDestinoFinal.setInitialValue(destinoFinal);
			cmbDestinoFinal.setDisabled(Boolean.TRUE);
			cmbDestinoConexaoPasso2.setInitialValue(destinoFinal);

			lsConexiones = conexionService.buscarPorConexionCtrl(conexionCtrlId);
			conexionesEditarList.setData(lsConexiones);

			// setando ultimo grupo usado nessa conexao:
			if (!lsConexiones.isEmpty()) {
				Conexion conexion = lsConexiones.get(lsConexiones.size() - 1);
				grupo = conexion.getNumgrupo();

				lsConexionesConf = conexionConfService.buscarPorConexionCtrl(conexionCtrl);
			}
		} else {
			conexionCtrl = null;
			btnApagar.setVisible(Boolean.FALSE);
		}

		List<ConexionExcepcion> ceList = new ArrayList<ConexionExcepcion>();
		if (conexionCtrlId != null)
			ceList = conexionExcepcionService.obtenerConexionExcepcionsActivo(conexionCtrlId);

		conexionExcepcionList.setData(ceList);

		conexionExcepcionList.setItemRenderer(new RenderConexionExcepcion());
		conexionExcepcionList.addEventListener("onClick", new EventListener() {

			@Override
			public void onEvent(Event event) throws Exception {
				conexionExcepcion = (ConexionExcepcion) conexionExcepcionList.getSelected();
			}
		});
	}

	public void onSelect$cmbOrigemInicial(Event ev) {
		Comboitem cbiOrigem = cmbOrigemInicial.getSelectedItem();
		if (cbiOrigem != null) {
			Parada origem = (Parada) cbiOrigem.getValue();
			cmbOrigemConexaoPasso1.setInitialValue(origem);
		}
		existeConexao();
	}

	public void onSelect$cmbDestinoFinal(Event ev) {
		Comboitem cbiDestino = cmbDestinoFinal.getSelectedItem();
		if (cbiDestino != null) {
			Parada destino = (Parada) cbiDestino.getValue();
			cmbDestinoConexaoPasso2.setInitialValue(destino);
		}
		existeConexao();
	}

	public void onSelect$cmbDestinoConexaoPasso1(Event ev) {
		Comboitem cbiDestino = cmbDestinoConexaoPasso1.getSelectedItem();
		Parada destino = (Parada) cbiDestino.getValue();
		cmbOrigemConexaoPasso2.setInitialValue(destino);			
	}

	public void onSelect$cmbDestinoConexaoPasso2(Event ev) {
		Comboitem cbiDestino = cmbDestinoConexaoPasso2.getSelectedItem();
		Parada destino = (Parada) cbiDestino.getValue();
		cmbOrigemConexaoPasso3.setInitialValue(destino);
		
		if (chkConFix.isChecked()){
			txtConexaoFixa2.setVisible(true);
			lblConexaoFixa2.setVisible(true);
		}
	}

	public void onSelect$cmbDestinoConexaoPasso3(Event ev) {
		Comboitem cbiDestino = cmbDestinoConexaoPasso3.getSelectedItem();
		Parada destino = (Parada) cbiDestino.getValue();
		cmbOrigemConexaoPasso4.setInitialValue(destino);
		
		if (chkConFix.isChecked()){
			txtConexaoFixa3.setVisible(true);
			lblConexaoFixa3.setVisible(true);
		}
	}
	
	public void onSelect$cmbDestinoConexaoPasso4(Event ev) {
		if (chkConFix.isChecked()){
			txtConexaoFixa4.setVisible(true);
			lblConexaoFixa4.setVisible(true);
		}
	}

	public void onClick$btnAddConexaoExcepcion(Event ev) throws InterruptedException {
		ConexionExcepcion ce = new ConexionExcepcion();
		selectConexaoExcepcion(ce);
	}

	public void onClick$btnModificarConexaoExcepcion(Event ev) throws InterruptedException {
		selectConexaoExcepcion(conexionExcepcion);
	}

	public void onClick$btnRemoverConexaoExcepcion(Event ev) throws InterruptedException {

		int resp = Messagebox.show(
				Labels.getLabel("editarConexionExcepcionController.MSG.borrarConexionPergunta"),
				Labels.getLabel("editarConexionExcepcionController.window.title"),
				Messagebox.YES | Messagebox.NO, Messagebox.QUESTION);

		if (resp == Messagebox.YES) {
			if (conexionExcepcion != null) {
				conexionExcepcionService.borrar(conexionExcepcion);
				conexionExcepcionList.removeItem(conexionExcepcion);
			} else {
				Messagebox.show(Labels.getLabel("editarConexionExcepcionController.MSG.selecionarConexion"),
						Labels.getLabel("editarConexionExcepcionController.window.title"),
						Messagebox.OK, Messagebox.INFORMATION);
			}
		}
	}

	@SuppressWarnings("unchecked")
	public void selectConexaoExcepcion(ConexionExcepcion ce) {
		@SuppressWarnings("rawtypes")
		Map args = new HashMap();
		args.put("conexionExcepcion", ce);
		args.put("conexionExcepcionList", conexionExcepcionList);

		if (conexionCtrl != null)
			args.put("conexionCtrlId", conexionCtrl.getConexionctrlId());

		openWindow("/gui/esquema_operacional/editarConexionExcepcion.zul",
				Labels.getLabel("editarConexionExcepcionController.window.title"), args, MODAL);
	}

	
	public void onCheck$chkConFix(Event ev){
		if (chkConFix.isChecked()){
			txtConexaoFixa1.setVisible(true);
			lblConexaoFixa1.setVisible(true);
			
			if (!cmbDestinoConexaoPasso2.getValue().isEmpty()){
				txtConexaoFixa2.setVisible(true);
				lblConexaoFixa2.setVisible(true);
			}
			
			if (!cmbDestinoConexaoPasso3.getValue().isEmpty()){
				txtConexaoFixa3.setVisible(true);
				lblConexaoFixa3.setVisible(true);
			}
			
			if (!cmbDestinoConexaoPasso4.getValue().isEmpty()){
				txtConexaoFixa4.setVisible(true);
				lblConexaoFixa4.setVisible(true);
			}
		} else{
			txtConexaoFixa1.setVisible(false);
			lblConexaoFixa1.setVisible(false);
			
			txtConexaoFixa2.setVisible(false);
			lblConexaoFixa2.setVisible(false);
			
			txtConexaoFixa3.setVisible(false);
			lblConexaoFixa3.setVisible(false);
			
			txtConexaoFixa4.setVisible(false);
			lblConexaoFixa4.setVisible(false);
		}
	}
	
	public void onClick$btnAddConexao(Event ev) throws InterruptedException {
		
		Comboitem cbiOrigem1 = cmbOrigemConexaoPasso1.getSelectedItem();
		if (cbiOrigem1 == null) {
			Messagebox.show(Labels.getLabel("editarConexionController.MSG.origem1"),
					Labels.getLabel("editarConexionController.window.title"),
					Messagebox.OK, Messagebox.INFORMATION);
			cmbOrigemInicial.focus();
			return;
		}
		Parada origemPasso1 = (Parada) cbiOrigem1.getValue();

		Comboitem cbiDestino1 = cmbDestinoConexaoPasso1.getSelectedItem();
		if (cbiDestino1 == null) {
			Messagebox.show(Labels.getLabel("editarConexionController.MSG.destino1"),
					Labels.getLabel("editarConexionController.window.title"),
					Messagebox.OK, Messagebox.INFORMATION);
			cmbDestinoConexaoPasso1.focus();
			return;
		}
		Parada destinoPasso1 = (Parada) cbiDestino1.getValue();

		Comboitem cbiOrigem2 = cmbOrigemConexaoPasso2.getSelectedItem();
		if (cbiOrigem2 == null) {
			Messagebox.show(Labels.getLabel("editarConexionController.MSG.origem2"),
					Labels.getLabel("editarConexionController.window.title"),
					Messagebox.OK, Messagebox.INFORMATION);
			return;
		}
		Parada origemPasso2 = (Parada) cbiOrigem2.getValue();

		Comboitem cbiDestino2 = cmbDestinoConexaoPasso2.getSelectedItem();
		if (cbiDestino2 == null) {
			Messagebox.show(Labels.getLabel("editarConexionController.MSG.destino2"),
					Labels.getLabel("editarConexionController.window.title"),
					Messagebox.OK, Messagebox.INFORMATION);
			return;
		}
		Parada destinoPasso2 = (Parada) cbiDestino2.getValue();

		Integer tempoMin = txtTiempoMin.getValue();
		if (tempoMin == null) {
			Messagebox.show(Labels.getLabel("editarConexionController.MSG.tempoMin"),
					Labels.getLabel("editarConexionController.window.title"),
					Messagebox.OK, Messagebox.INFORMATION);
			txtTiempoMin.focus();
			return;
		}

		Integer tempoMax = txtTiempoMax.getValue();
		if (tempoMax == null) {
			Messagebox.show(Labels.getLabel("editarConexionController.MSG.tempoMax"),
					Labels.getLabel("editarConexionController.window.title"),
					Messagebox.OK, Messagebox.INFORMATION);
			txtTiempoMax.focus();
			return;
		}

		BigDecimal porSec1 = txtPorSec1.getValue();
		if (porSec1 == null) {
			Messagebox.show(Labels.getLabel("editarConexionController.MSG.porSec1"),
					Labels.getLabel("editarConexionController.window.title"),
					Messagebox.OK, Messagebox.INFORMATION);
			txtPorSec1.focus();
			return;
		}

		BigDecimal porSec2 = txtPorSec2.getValue();
		if (porSec2 == null) {
			Messagebox.show(Labels.getLabel("editarConexionController.MSG.porSec2"),
					Labels.getLabel("editarConexionController.window.title"),
					Messagebox.OK, Messagebox.INFORMATION);
			txtPorSec2.focus();
			return;
		}
		
		if (chkConFix.isChecked()){
			if (txtConexaoFixa1.getValue().isEmpty()){
				Messagebox.show(Labels.getLabel("editarConexionController.MSG.conexaoFixa1"),
						Labels.getLabel("editarConexionController.window.title"),
						Messagebox.OK, Messagebox.INFORMATION);
				txtConexaoFixa1.focus();
				return;
			}
			
			if (!cmbDestinoConexaoPasso2.getValue().isEmpty() && txtConexaoFixa2.getValue().isEmpty()){
				Messagebox.show(Labels.getLabel("editarConexionController.MSG.conexaoFixa2"),
						Labels.getLabel("editarConexionController.window.title"),
						Messagebox.OK, Messagebox.INFORMATION);
				txtConexaoFixa2.focus();
				return;
			}
			
			if (!cmbDestinoConexaoPasso3.getValue().isEmpty() && txtConexaoFixa3.getValue().isEmpty()){
				Messagebox.show(Labels.getLabel("editarConexionController.MSG.conexaoFixa3"),
						Labels.getLabel("editarConexionController.window.title"),
						Messagebox.OK, Messagebox.INFORMATION);
				txtConexaoFixa3.focus();
				return;
			}
			
			if (!cmbDestinoConexaoPasso4.getValue().isEmpty() && txtConexaoFixa4.getValue().isEmpty()){
				Messagebox.show(Labels.getLabel("editarConexionController.MSG.conexaoFixa4"),
						Labels.getLabel("editarConexionController.window.title"),
						Messagebox.OK, Messagebox.INFORMATION);
				txtConexaoFixa4.focus();
				return;
			}
		}

		grupo++;

		Conexion conexionPasso1 = new Conexion();
		conexionPasso1.setOrigenId(origemPasso1.getParadaId());
		conexionPasso1.setDestinoId(destinoPasso1.getParadaId());
		conexionPasso1.setNumgrupo(grupo);
		conexionPasso1.setNumsecuencia((short) 1);
		if (!txtConexaoFixa1.getValue().isEmpty()){
			conexionPasso1.setCorridaId(Long.parseLong(txtConexaoFixa1.getValue()));			
		}

		Conexion conexionPasso2 = new Conexion();
		conexionPasso2.setOrigenId(origemPasso2.getParadaId());
		conexionPasso2.setDestinoId(destinoPasso2.getParadaId());
		conexionPasso2.setNumgrupo(grupo);
		conexionPasso2.setNumsecuencia((short) 2);
		if (!txtConexaoFixa2.getValue().isEmpty()){
			conexionPasso2.setCorridaId(Long.parseLong(txtConexaoFixa2.getValue()));			
		}

		Comboitem cbiDestino = cmbDestinoFinal.getSelectedItem();
		Parada destino = (Parada) cbiDestino.getValue();
		Parada destinoFinal = paradaService.obtenerID(destino.getParadaId());

		if (cmbOrigemConexaoPasso3.getSelectedItem() != null &&
				cmbDestinoConexaoPasso3.getSelectedItem() != null) {

			if (cmbOrigemConexaoPasso4.getSelectedItem() != null &&
					cmbDestinoConexaoPasso4.getSelectedItem() != null) {

				Comboitem cbiDestino4 = cmbDestinoConexaoPasso4.getSelectedItem();
				Parada destinoPasso4 = (Parada) cbiDestino4.getValue();
				if (!destinoFinal.equals(destinoPasso4)) {
					Messagebox.show(Labels.getLabel("editarConexionController.MSG.destinoFinal"),
							Labels.getLabel("editarConexionController.window.title"),
							Messagebox.OK, Messagebox.INFORMATION);
					cmbDestinoConexaoPasso4.focus();
					return;
				}

			}
			if (cmbOrigemConexaoPasso4.getSelectedItem() != null &&
					cmbDestinoConexaoPasso4.getSelectedItem() == null) {
				Messagebox.show(Labels.getLabel("editarConexionController.MSG.destinoFinal"),
						Labels.getLabel("editarConexionController.window.title"),
						Messagebox.OK, Messagebox.INFORMATION);
				cmbDestinoConexaoPasso4.focus();
				return;

			}
			if (cmbOrigemConexaoPasso4.getSelectedItem() == null &&
					cmbDestinoConexaoPasso4.getSelectedItem() == null) {

				Comboitem cbiDestino3 = cmbDestinoConexaoPasso3.getSelectedItem();
				Parada destinoPasso3 = (Parada) cbiDestino3.getValue();
				if (!destinoFinal.equals(destinoPasso3)) {
					Messagebox.show(Labels.getLabel("editarConexionController.MSG.destinoFinal"),
							Labels.getLabel("editarConexionController.window.title"),
							Messagebox.OK, Messagebox.INFORMATION);
					cmbDestinoConexaoPasso3.focus();
					return;
				}
			}
		}
		if (cmbOrigemConexaoPasso3.getSelectedItem() != null &&
				cmbDestinoConexaoPasso3.getSelectedItem() == null) {
			Messagebox.show(Labels.getLabel("editarConexionController.MSG.destino3"),
					Labels.getLabel("editarConexionController.window.title"),
					Messagebox.OK, Messagebox.INFORMATION);
			cmbDestinoConexaoPasso3.focus();
			return;
		}

		if ((cmbOrigemConexaoPasso3.getSelectedItem() == null ||
				cmbDestinoConexaoPasso3.getSelectedItem() == null) &&
				(cmbOrigemConexaoPasso4.getSelectedItem() != null ||
				cmbDestinoConexaoPasso4.getSelectedItem() != null)) {
			Messagebox.show(Labels.getLabel("editarConexionController.MSG.origem3"),
					Labels.getLabel("editarConexionController.window.title"),
					Messagebox.OK, Messagebox.INFORMATION);
			cmbOrigemConexaoPasso3.focus();
			return;
		}

		lsConexiones.add(conexionPasso1);
		lsConexiones.add(conexionPasso2);

		BigDecimal porSec3 = BigDecimal.ZERO;
		if (cmbOrigemConexaoPasso3.getSelectedItem() != null &&
				cmbDestinoConexaoPasso3.getSelectedItem() != null) {
			Comboitem cbiOrigem3 = cmbOrigemConexaoPasso3.getSelectedItem();
			Parada origemPasso3 = (Parada) cbiOrigem3.getValue();

			Comboitem cbiDestino3 = cmbDestinoConexaoPasso3.getSelectedItem();
			Parada destinoPasso3 = (Parada) cbiDestino3.getValue();

			porSec3 = txtPorSec3.getValue();
			if (porSec3 == null) {
				Messagebox.show(Labels.getLabel("editarConexionController.MSG.porSec3"),
						Labels.getLabel("editarConexionController.window.title"),
						Messagebox.OK, Messagebox.INFORMATION);
				txtPorSec1.focus();
				return;
			}

			Conexion conexionPasso3 = new Conexion();
			conexionPasso3.setOrigenId(origemPasso3.getParadaId());
			conexionPasso3.setDestinoId(destinoPasso3.getParadaId());
			conexionPasso3.setNumgrupo(grupo);
			conexionPasso3.setNumsecuencia((short) 3);
			if (!txtConexaoFixa3.getValue().isEmpty()){
				conexionPasso3.setCorridaId(Long.parseLong(txtConexaoFixa3.getValue()));				
			}
			
			lsConexiones.add(conexionPasso3);
		}

		BigDecimal porSec4 = BigDecimal.ZERO;
		if (cmbOrigemConexaoPasso4.getSelectedItem() != null &&
				cmbDestinoConexaoPasso4.getSelectedItem() != null) {
			Comboitem cbiOrigem4 = cmbOrigemConexaoPasso4.getSelectedItem();
			Parada origemPasso4 = (Parada) cbiOrigem4.getValue();

			Comboitem cbiDestino4 = cmbDestinoConexaoPasso4.getSelectedItem();
			Parada destinoPasso4 = (Parada) cbiDestino4.getValue();

			porSec4 = txtPorSec4.getValue();
			if (porSec4 == null) {
				Messagebox.show(Labels.getLabel("editarConexionController.MSG.porSec4"),
						Labels.getLabel("editarConexionController.window.title"),
						Messagebox.OK, Messagebox.INFORMATION);
				txtPorSec1.focus();
				return;
			}

			Conexion conexionPasso4 = new Conexion();
			conexionPasso4.setOrigenId(origemPasso4.getParadaId());
			conexionPasso4.setDestinoId(destinoPasso4.getParadaId());
			conexionPasso4.setNumgrupo(grupo);
			conexionPasso4.setNumsecuencia((short) 4);
			if (!txtConexaoFixa4.getValue().isEmpty()){
				conexionPasso4.setCorridaId(Long.parseLong(txtConexaoFixa4.getValue()));				
			}

			lsConexiones.add(conexionPasso4);
		}
		conexionesEditarList.setData(lsConexiones);

		ConexionConf conexionConf = new ConexionConf();
		conexionConf.setGrupo(grupo);
		conexionConf.setIndisponible(Boolean.FALSE);
		conexionConf.setPorSec1(porSec1);
		conexionConf.setPorSec2(porSec2);
		conexionConf.setPorSec3(porSec3);
		conexionConf.setPorSec4(porSec4);
		conexionConf.setTiempoMin(tempoMin);
		conexionConf.setTiempoMax(tempoMax);
		lsConexionesConf.add(conexionConf);

		txtTiempoMin.setValue(null);
		txtTiempoMax.setValue(null);
		txtPorSec1.setText(null);
		txtPorSec2.setText(null);
		txtPorSec3.setText(null);
		txtPorSec4.setText(null);
		cmbDestinoConexaoPasso1.setSelectedItem(null);
		cmbOrigemConexaoPasso2.setSelectedItem(null);

		cmbDestinoConexaoPasso2.setSelectedItem(null);
		cmbDestinoConexaoPasso2.setInitialValue(destinoFinal);

		cmbOrigemConexaoPasso3.setSelectedItem(null);
		cmbDestinoConexaoPasso3.setSelectedItem(null);
		cmbOrigemConexaoPasso4.setSelectedItem(null);
		cmbDestinoConexaoPasso4.setSelectedItem(null);

		txtTiempoMin.focus();
	}

	public void onClick$btnModificarConexao(Event ev) throws InterruptedException {
		verConfiguracaoConexao();
	}

	public void onClick$btnRemoverConexao(Event ev) throws Exception {
		int resp = Messagebox.show(
				Labels.getLabel("editarConexionController.MSG.borrarConexionPergunta"),
				Labels.getLabel("editarConexionController.window.title"),
				Messagebox.YES | Messagebox.NO, Messagebox.QUESTION);

		if (resp == Messagebox.YES) {
			Conexion conexionDeletar = (Conexion) conexionesEditarList.getSelected();

			if (conexionDeletar != null) {
				// procurando conexions do mesmo grupo e setando acitvo false
				List<Integer> removerLista = new ArrayList<Integer>();
				for (int i = 0; i < lsConexiones.size(); i++) {
					Conexion conexion = lsConexiones.get(i);
					if (conexion.getNumgrupo().equals(conexionDeletar.getNumgrupo())) {
						conexionService.borrar(conexion);

						removerLista.add(i);
					}
				}

				// removendo da lista
				if (conexionCtrl != null) {
					lsConexiones = conexionService.buscarPorConexionCtrl(conexionCtrl.getConexionctrlId());
					conexionesEditarList.setData(lsConexiones);
				} else {
					lsConexiones = new ArrayList<Conexion>();
					conexionesEditarList.setData(lsConexiones);
				}
			} else {
				Messagebox.show(Labels.getLabel("editarConexionController.MSG.selecionarConexion"),
						Labels.getLabel("editarConexionController.window.title"),
						Messagebox.OK, Messagebox.INFORMATION);
			}
		}
	}

	public void onClick$btnSalvar(Event ev) throws Exception {
		Parada origem = null;
		Parada destino = null;
		Comboitem cbiOrigem = cmbOrigemInicial.getSelectedItem();
		if (cbiOrigem != null) {
			origem = (Parada) cbiOrigem.getValue();
		}

		Comboitem cbiDestino = cmbDestinoFinal.getSelectedItem();
		if (cbiDestino != null) {
			destino = (Parada) cbiDestino.getValue();
		}
		if (lsConexiones == null || lsConexiones.isEmpty() || lsConexionesConf == null || lsConexionesConf.isEmpty()) {
			Messagebox.show(Labels.getLabel("editarConexionController.MSG.conexaoInexistente"),
					Labels.getLabel("editarConexionController.window.title"),
					Messagebox.OK, Messagebox.EXCLAMATION);
			return;
		}
		if (conexionCtrl == null) {
			conexionCtrl = new ConexionCtrl();

			conexionCtrl.setOrigenId(origem.getParadaId());
			conexionCtrl.setDestinoId(destino.getParadaId());
			
			for (Conexion conexion: lsConexiones){
				if (conexion.getCorridaId()!=null){
					conexionCtrl.setIndfixa(1);
					break;
				}
			}
			
			if (conexionCtrl.getIndfixa() == null){
				conexionCtrl.setIndfixa(0);
			}
			conexionCtrlService.suscribir(conexionCtrl);
		} else{
			
			for (Conexion conexion: lsConexiones){
				if (conexion.getCorridaId()!=null){
					conexionCtrl.setIndfixa(1);		
					conexionCtrlService.actualizacion(conexionCtrl);
					
					break;
				}
			}
		}

		for (Conexion conexion : lsConexiones) {
			if (conexion.getConexionId() == null) {
				conexion.setConexionctrlId(conexionCtrl.getConexionctrlId());
				conexionService.suscribir(conexion);
			} else {
				conexionService.actualizacion(conexion);
			}
		}

		for (ConexionConf conexionConf : lsConexionesConf) {
			if (conexionConf.getConexionConfId() == null) {
				conexionConf.setConexionCtrl(conexionCtrl);
				conexionConfService.suscribir(conexionConf);
			}
		}

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

		closeWindow();
	}

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

		if (resp == Messagebox.YES) {
			conexionCtrlService.borrar(conexionCtrl);

			Messagebox.show(Labels.getLabel("editarConexionController.MSG.borrarConexionCtrlSucesso"),
					Labels.getLabel("editarConexionController.window.title"),
					Messagebox.OK, Messagebox.INFORMATION);

			conexionesList.setData(new ArrayList<ConexionVO>());

			closeWindow();
		}
	}

	@SuppressWarnings({ "rawtypes", "unchecked" })
	private void verConfiguracaoConexao() throws InterruptedException {
		Map args = new HashMap();
		Conexion conexion = (Conexion) conexionesEditarList.getSelected();

		if ((conexion != null) && (conexion.getConexionId() != null)) {
			ConexionConf conexionConf = conexionConfService.buscar(conexionCtrl.getConexionctrlId(), conexion.getNumgrupo());
			args.put("conexionConf", conexionConf);
			args.put("conexionesEditarList", conexionesEditarList);

			openWindow("/gui/esquema_operacional/editarConexionConf.zul",
					Labels.getLabel("editarConexionConfController.window.title"), args, MODAL);
		} else {
			Messagebox.show(Labels.getLabel("editarConexionController.MSG.modificarconexionnosalva"),
					Labels.getLabel("editarConexionController.window.title"),
					Messagebox.OK, Messagebox.INFORMATION);
		}
	}

	private void existeConexao() {

		Comboitem cbiOrigem = cmbOrigemInicial.getSelectedItem();
		Parada origem = (Parada) cbiOrigem.getValue();

		Comboitem cbiDestino = cmbDestinoFinal.getSelectedItem();
		Parada destino = (Parada) cbiDestino.getValue();

		if (origem != null && destino != null) {
			List<ConexionCtrl> list = conexionCtrlService.buscarConexionesCtrl(origem.getParadaId(), destino.getParadaId());
			if (!list.isEmpty()) {

				try {
					Messagebox.show(
							Labels.getLabel("editarConexionController.MSG.ConexaoExistente", new Object[] { origem.getDescparada(), destino.getDescparada() }),
							Labels.getLabel("editarConexionController.window.title"),
							Messagebox.OK, Messagebox.EXCLAMATION);
				} catch (InterruptedException e) {
					log.error(e);
				}

				cmbDestinoFinal.setSelectedItem(null);
				cmbDestinoConexaoPasso2.setInitialValue(null);

				return;
			}
		}
	}
}
