#!/bin/sh

# Returns last con id
__console_last() {
	local conlast="$(zfs get -H -o value iohyve:con | tr ',' '\n' | cut -c5- | sort -V | tail -n1)"
	local con='0'
	if [ -n "$conlast" ]; then
		con="$(expr $conlast + 1)"
	fi
	echo $con
}

# List consoles in use
__console_list() {
	local pool="$(zfs list -H | grep iohyve | cut -d '/' -f 1 | head -n1)"
	local guestlist="$(zfs list -H | grep iohyve | grep -v ISO | grep -v disk | grep -v Firmware | sed 1d | cut -f1 | cut -d '/' -f3)"
	(
	printf 'Guest\tConsole\n'
	for guest in $guestlist; do
		local con="$(zfs get -H -o value iohyve:con $pool/iohyve/$guest)"
		printf $guest'\t'$con'\n'
	done
	) | column -t
}

# Run console
__console_console() {
	local name="$2"
	if [ -z "$name" ]; then
		printf "missing argument\nusage:\n"
		printf "\tconsole <name>\n"
		exit 1
	fi

	local dataset="$(zfs get -H -s local,received -o name,value -t filesystem iohyve:name | cut -d '/' -f-3 | grep iohyve | grep "$(printf '\t')$name$" | cut -f1)"
	local con="$(zfs get -H -o value iohyve:con $dataset)"
	echo "Starting console on $name..."
	echo "~~. to escape console [uses cu(1) for console]"
	cu -l /dev/${con}B -s 9600
}

# Reset all consoles. This kills the cu(1)
__console_reset() {
	killall cu
}
