# adb completion                                           -*- shell-script -*-

_adb_command_usage()
{
    COMPREPLY=( $( compgen -W \
        '$( "$1" help 2>&1 | command grep "^ *\(adb \)\? *$2 " \
            | command sed -e "s/[]|[]/\n/g" | _parse_help - )' -- "$cur" ) )
}

_adb()
{
    local cur prev words cword
    _init_completion || return

    case $prev in
        -s|-p|--algo|--key|--iv)
            return
            ;;
        -f)
            _filedir
            return
            ;;
    esac

    local cmd i
    for (( i=1; i < cword; i++ )); do
        if [[ "${words[i]}" != -* && "${words[i-1]}" != -[sp] ]]; then
            cmd="${words[i]}"
            break
        fi
    done

    if [[ ! "$cmd" ]]; then
        local tmp=()
        if [[ ! $cur || $cur == -* ]]; then
            tmp+=( $( compgen -W '$( _parse_help "$1" help )' -- "$cur" ) )
        fi
        if [[ ! $cur || $cur != -* ]]; then
            tmp+=( $( $1 help 2>&1 | awk '$1 == "adb" { print $2 }' ) )
            tmp+=( devices connect disconnect sideload )
        fi
        COMPREPLY=( $( compgen -W '${tmp[@]}' -- "$cur" ) )
        return
    fi

    # TODO: more and better command completions

    _adb_command_usage "$1" $cmd

    case $cmd in
        push|restore|sideload)
            _filedir
            ;;
        forward)
            COMPREPLY=( $( compgen -W \
                '$( "$1" help 2>&1 | command sed -ne "s/^ *adb  *forward  *-/-/p" | \
                    _parse_help - )' -- "$cur" ) )
            ;;
        reboot)
            COMPREPLY=( $( compgen -W 'bootloader recovery' -- "$cur" ) )
            ;;
    esac
} &&
complete -F _adb adb

# ex: filetype=sh
