#!/usr/bin/env bash

BASE_DIR=$(readlink -f $(dirname $0))
[[ -z "$COMMON_DIR" ]] && COMMON_DIR="$(cd $BASE_DIR/../common && pwd)"
[[ -z "$TEST_DIR" ]] && TEST_DIR="$(cd $BASE_DIR/../../../../ && pwd)"

function usage()
{
	[[ ! -z $2 ]] && ( echo "$2"; echo ""; )
	echo "Shortcut script for connecting to or executing command on selected VM"
	echo "Usage: $(basename $1) [OPTIONS] VM_NUMBER"
	echo
	echo "-h, --help                print help and exit"
	echo "    --work-dir=WORK_DIR   Where to find build file. Must exist. [default: $TEST_DIR]"
	echo "-w                        Don't wait for vm to boot"
	echo "-x                        set -x for script debug"
	exit 0
}

boot_wait=true
while getopts 'xwh-:' optchar; do
	case "$optchar" in
		-)
		case "$OPTARG" in
			help)	usage $0 ;;
			work-dir=*) TEST_DIR="${OPTARG#*=}" ;;
			*) usage $0 "Invalid argument '$OPTARG'" ;;
		esac ;;
	h) usage $0 ;;
	w) boot_wait=false ;;
	x) set -x ;;
	*) usage $0 "Invalid argument '$OPTARG'" ;;
	esac
done

. $COMMON_DIR/common.sh

shift $((OPTIND-1))
vm_num="$1"
shift


if ! vm_num_is_valid $vm_num; then
	usage $0 "Invalid VM num $vm_num"
	exit 1
fi

if $boot_wait; then
	while ! vm_os_booted $vm_num; do
		if ! vm_is_running $vm_num; then
			fail "VM$vm_num is not running"
		fi
		notice "waiting for VM$vm_num to boot"
		sleep 1
	done
fi

vm_ssh $vm_num "$@"
