#!/bin/sh

if [ $IOH_DEBUG ]; then
	set -x
fi

# Check whether a given command requires root
__root_req_cmd () {
		case "$1" in
		setup|fetchiso|fetch|cpiso|renameiso|rmiso|fetchfw|cpfw|renamefw|rmfw|create|install|load\
		|boot|start|uefi|stop|forcekill|scram|destroy|rename|delete|set|fix-bargs|add|remove\
		|resize|disks|snap|roll|clone|export|console|conreset)
			return 0
			;;
		*)
			return 1
			;;
		esac
}

# Process command line
__parse_cmd () {
	while [ $# -gt 0 ] ; do
		case "$1" in
			version)
				__version
				exit
				;;
			setup)
				__setup "$@"
				exit
				;;
			list)
				__guest_list "$2"
				exit
				;;
			info)
				__guest_info "$@"
				exit
				;;
			isolist)
				__iso_list
				exit
				;;
			fwlist)
				__firmware_list
				exit
				;;
			fetchiso|fetch)
				__iso_fetch "$@"
				exit
				;;
			cpiso)
				__iso_copy "$@"
				exit
				;;
			renameiso)
				__iso_rename "$@"
				exit
				;;
			rmiso)
				__iso_delete "$@"
				exit
				;;
			fetchfw)
				__firmware_fetch "$@"
				exit
				;;
			cpfw)
				__firmware_copy "$@"
				exit
				;;
			renamefw)
				__firmware_rename "$@"
				exit
				;;
			rmfw)
				__firmware_delete "$@"
				exit
				;;
			create)
				__guest_create "$@"
				exit
				;;
			install)
				__guest_install "$@"
				exit
				;;
			load)
				__guest_load "$2" "$3"
				exit
				;;
			boot)
				__guest_boot "$2" "$3" "$4"
				exit
				;;
			start)
				__guest_start "$@"
				exit
				;;
			uefi)
				__guest_uefi "$@"
				exit
				;;
			stop)
				__guest_stop "$@"
				exit
				;;
			forcekill)
				__guest_forcekill "$@"
				exit
				;;
			scram)
				__guest_scram
				exit
				;;
			destroy)
				__guest_destroy "$@"
				exit
				;;
			rename)
				__guest_rename "$@"
				exit
				;;
			delete)
				__guest_delete "$@"
				exit
				;;
			set)
				__zfs_set "$@"
				exit
				;;
			get)
				__zfs_get "$@"
				exit
				;;
			rmprop)
				__zfs_rmprop "$@"
				exit
				;;
			rmsnap)
				__zfs_rmsnap "$@"
				exit
				;;
			getall)
				__zfs_getall "$@"
				exit
				;;
			fix-bargs)
				__fixbargs "$@"
				exit
				;;
			add)
				__disk_add "$@"
				exit
				;;
			remove)
				__disk_remove "$@"
				exit
				;;
			resize)
				__disk_resize "$@"
				exit
				;;
			disks)
				__disk_disks "$@"
				exit
				;;
			snap)
				__zfs_snapguest "$@"
				exit
				;;
			roll)
				__zfs_rollguest "$@"
				exit
				;;
			clone)
				__zfs_cloneguest "$@"
				exit
				;;
			export)
				__zfs_exportguest "$@"
				exit
				;;
			snaplist)
				__zfs_snaplist
				exit
				;;
			taplist)
				__tap_list
				exit
				;;
			tapadd)
				__tap_add "$@"
				exit
				;;
			tapdel)
				__tap_del "$@"
				exit
				;;
			activetaps)
				__tap_active_list
				exit
				;;
			conlist)
				__console_list
				exit
				;;
			console)
				__console_console "$@"
				exit
				;;
			conreset)
				__console_reset
				exit
				;;
			help|-h)
				__help
				exit
				;;
			*)
				__unrecognised "$@"
				exit 1
				;;
		esac
		shift
	done
}

# Informs user that command is unrecognised.
__unrecognised() {
	echo "'$1' is not a valid command!"
	echo "Try 'iohyve help' for more info."
}
