source /usr/lib/l3vm/l3vm_lib.sh

L3VM_COMMANDS=( ls list clone describe log destroy detach start stop suspend resume address console rename hibernate help reserve info disk register certificate)
LS_PARAMS=( --all --all-clones --clones --templates --long )

_l3vm() {
	if [ "${#COMP_WORDS[@]}" -le 2 ] || [ "$COMP_CWORD" = 1 ]; then
	# no parameters yet
		COMPREPLY=( $(compgen -W "${L3VM_COMMANDS[*]}" -- "${COMP_WORDS[COMP_CWORD]}") )
		return
	fi
	case "${COMP_WORDS[1]}" in
		ls|list)
			local LS_ACTUAL_PARAMS
			if [ "${#COMP_WORDS[@]}" -lt 4 ]; then
				LS_ACTUAL_PARAMS=( "${LS_PARAMS[@]}" )
			else
				LS_ACTUAL_PARAMS=( )
			fi
			COMPREPLY=( $(compgen -W "${LS_ACTUAL_PARAMS[*]}" -- "${COMP_WORDS[COMP_CWORD]}") ) ;;
		start)
			complete_stopped;;
		stop)
			complete_stop;;
		resume)
			complete_paused;;
		suspend)
			complete_running;;
		clone)
			complete_cloning;;
		destroy)
			complete_clones;;
		console)
			complete_running;;
		address)
			complete_running;;
		hibernate)
			complete_running;;
		rename)
			if [ "$COMP_CWORD" = 3 -a -z "${COMP_WORDS[3]}" ]; then
				return
			fi
			complete_clones;;
		detach)
			complete_clones;;
		describe)
			complete_clones;;
		info)
			complete_machines;;
		log)
			complete_machines;;
		reserve)
			complete_clones;;
		disk)
			complete_disk;;
		register)
			case "${COMP_CWORD}" in
				2) complete_running ;;
				3) complete_templates ;;
			esac;;
		certificate)
			complete_running;;
	esac
}

complete -F _l3vm l3vm

