#
# bash completion for ejabberdctl
#
get_help()
{
    local COMMANDCACHE=/tmp/ejabberd_bash_completion_$RANDOM
    ejabberdctl $CTLARGS help tags >$COMMANDCACHE.tags
    ejabberdctl $CTLARGS >$COMMANDCACHE
    if [[ $? == 2 ]] ; then
        ISRUNNING=1
        runningcommands=`cat $COMMANDCACHE | grep "^  [a-z]" | awk '{print $1}' | xargs`
        runningtags=`cat $COMMANDCACHE.tags | grep "^  [a-z]" | awk '{print $1}' | xargs`
    fi
    rm $COMMANDCACHE
    rm $COMMANDCACHE.tags
}

_ejabberdctl()
{
    local cur prev
    local ISRUNNING=0
    local runningcommands

    COMPREPLY=()
    cur="${COMP_WORDS[COMP_CWORD]}"
    prev="${COMP_WORDS[COMP_CWORD-1]}"

    local startcoms="start foreground foreground-quiet live debug etop iexdebug iexlive ping started stopped"
    local startpars="--config-dir --config --ctl-config --logs --node --spool"

    local i=1
    local CTLARGS=""
    while [ $i -lt $COMP_CWORD ] ; do
        local PARAM="${COMP_WORDS[i]}"
        i=$((i+1))
        case $PARAM in
            --*)
                CTLARGS="--node ${COMP_WORDS[i]}"
                i=$((i+1)) ;;
            *) break ;;
        esac
    done

    case "${prev##*/}" in
        ejabberdctl)
            # This clause matches even when calling `/sbin/ejabberdctl` thanks to the ##*/ in the case
            get_help
            COMPREPLY=($(compgen -W "--node ${startpars} ${startcoms} ${runningcommands}" -- $cur))
            return 0
            ;;
        start|live)
            COMPREPLY=($(compgen -W "--node ${startpars}" -- $cur))
            return 0
            ;;
        debug)
            COMPREPLY=($(compgen -W "--node" -- $cur))
            return 0
            ;;
        help)
            get_help
            COMPREPLY=($(compgen -W "${runningcommands} ${runningtags}" -- $cur))
            return 0
            ;;
        --node)
            RUNNINGNODES=`epmd -names | grep name | awk '{print $2"@localhost"}' | xargs`
            COMPREPLY=($(compgen -W "$RUNNINGNODES" -- $cur))
            return 0
            ;;
        --config|--ctl-config)
            _filedir '?(u)cfg'
            return 0
            ;;
        --config-dir|--logs|--spool)
            _filedir
            return 0
            ;;
        *)
            prev2="${COMP_WORDS[COMP_CWORD-2]}"
            get_help
            if [[ "$prev2" == --* ]]; then
                COMPREPLY=($(compgen -W "--node ${startpars} ${startcoms} ${runningcommands}" -- $cur))
            else
                if [[ $ISRUNNING == 1 ]]; then
                    echo ""
                    ejabberdctl $CTLARGS help ${PARAM}
                    echo -n "${COMP_LINE}"
                fi
            fi
            return 0
            ;;
    esac
}

complete -F _ejabberdctl ejabberdctl

# Local variables:
# mode: shell-script
# sh-basic-offset: 4
# sh-indent-comment: t
# indent-tabs-mode: nil
# End:
# ex: ts=4 sw=4 et filetype=sh
