#!/bin/sh

_dcv_commands_from_help()
{
    dcv --help 2>&1 | grep -e "^  " | awk '{print $1}' | grep -v dcv
}

_dcv_command_options_from_help()
{
    local cmd=$1
    [[ -n ${cmd} ]] && dcv ${cmd} --help 2>&1 | grep -e "^  --" | awk '{print $1}' | sed 's/=.*$//'
}

_dcv_session_name()
{
    dcv list-sessions 2>/dev/null | awk '{print $2}'
}

_dcv()
{
    local cur prev first

    COMPREPLY=()

    cur="${COMP_WORDS[COMP_CWORD]}"
    prev=${COMP_WORDS[COMP_CWORD-1]}
    first=${COMP_WORDS[1]}

    if [[ ${prev} == dcv ]] ; then
        COMPREPLY=($(compgen -W "$(_dcv_commands_from_help)" -- ${cur}))
        return 0
    fi

    if [[ ${cur} == -* ]] ; then
        COMPREPLY=( $(compgen -W "$(_dcv_command_options_from_help ${first})" -- ${cur}) )
        return 0
    fi

    if [[ ${prev} == --type ]] ; then
        COMPREPLY=( $(compgen -W "console virtual" -- ${cur}) )
        return 0
    fi

    if [[ ${first} == close-session ]] || \
       [[ ${first} == describe-session ]] || \
       [[ ${first} == list-connections ]]; then
        COMPREPLY=( $(compgen -W "$(_dcv_session_name)" -- ${cur}) )
        return 0
    fi

    return 0
}

complete -F _dcv dcv

# ex:ts=4:et:
