# nmcli completion                                         -*- shell-script -*-

# Use of this file is deprecated.  Upstream completion is available in
# NetworkManager >= 0.9.8.0, use that instead.

_nmcli_list()
{
    COMPREPLY=( $( compgen -W '$1' -- "$cur" ) )
}

_nmcli_con_id()
{
    local IFS=$'\n'
    COMPREPLY=( $( compgen -W "$(nmcli con list 2>/dev/null | \
        tail -n +2 | awk -F ' {2,}' '{print $1 }')" -- "$cur" ) )
}

_nmcli_con_uuid()
{
    COMPREPLY=( $( compgen -W "$(nmcli con list 2>/dev/null | \
        tail -n +2 | awk -F ' {2,}' '{print $2}')" -- "$cur" ) )
}

_nmcli_ap_ssid()
{
    local IFS=$'\n'
    COMPREPLY=( $( compgen -W "$(nmcli dev wifi list 2>/dev/null | \
        tail -n +2 | awk -F ' {2,}' '{print $1}')" -- "$cur" ) )
}

_nmcli_ab_bssid()
{
    COMPREPLY=( $( compgen -W "$(nmcli dev wifi list 2>/dev/null | \
        tail -n +2 | awk -F ' {2,}' '{print $2}')" -- "$cur" ) )
}

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

    case $prev in
        -m|--mode)
            COMPREPLY=( $( compgen -W 'tabular multiline' -- "$cur" ) )
            return
            ;;
        -f|--fields)
            COMPREPLY=( $( compgen -W 'all common' -- "$cur" ) )
            return
            ;;
        -e|--escape)
            _nmcli_list "yes no"
            return
            ;;
        id)
            _nmcli_con_id
            return
            ;;
        uuid)
            _nmcli_con_uuid
            return
            ;;
        iface)
            _available_interfaces
            return
            ;;
        bssid)
            _nmcli_ab_bssid
            return
            ;;
        wep-key-type)
            _nmcli_list "key phrase"
            return
            ;;
    esac

    if [[ $cword -eq 1 ]] ; then
        if [[ "$cur" == -* ]]; then
            COMPREPLY=( $( compgen -W '--terse --pretty --mode --fields
                --escape --version --help' -- "$cur" ) )
        else
            COMPREPLY=( $( compgen -W "nm con dev" -- "$cur" ) )
        fi
    else
        local object=${words[1]}
        local command=${words[2]}

        case $object in
            nm)
                case $command in
                    enable)
                        _nmcli_list "true false"
                        return
                        ;;
                    sleep)
                        _nmcli_list "true false"
                        return
                        ;;
                    wifi)
                        _nmcli_list "on off"
                        return
                        ;;
                    wwan)
                        _nmcli_list "on off"
                        return
                        ;;
                    wimax)
                        _nmcli_list "on off"
                        return
                        ;;
                esac

                COMPREPLY=( $( compgen -W 'status permissions enable sleep
                    wifi wwan wimax' -- "$cur" ) )
                ;;
            con)
                case $command in
                    list)
                        COMPREPLY=( $( compgen -W 'id uuid' -- "$cur" ) )
                        return
                        ;;
                    up)
                        if [[ "$cur" == -* ]]; then
                            COMPREPLY=( $( compgen -W '--nowait --timeout' \
                                -- "$cur" ) )
                        else
                            COMPREPLY=( $( compgen -W 'id uuid iface ap nsp' \
                                -- "$cur" ) )
                        fi
                        return
                        ;;
                    down)
                        COMPREPLY=( $( compgen -W 'id uuid' -- "$cur" ) )
                        return
                        ;;
                    delete)
                        COMPREPLY=( $( compgen -W 'id uuid' -- "$cur" ) )
                        return
                        ;;
                esac

                COMPREPLY=( $( compgen -W 'list status up down delete' \
                        -- "$cur" ) )
                ;;
            dev)
                case $command in
                    list)
                        COMPREPLY=( $( compgen -W 'iface' -- "$cur" ) )
                        return
                        ;;
                    disconnect)
                        if [[ "$cur" == -* ]]; then
                            COMPREPLY=( $( compgen -W '--nowait --timeout' \
                                -- "$cur" ) )
                        else
                            COMPREPLY=( $( compgen -W 'iface' -- "$cur" ) )
                        fi
                        return
                        ;;
                    wifi)
                        local subcommand=${words[3]}

                        case $subcommand in
                            list)
                                COMPREPLY=( $( compgen -W 'iface bssid' \
                                    -- "$cur" ) )
                                return
                                ;;
                            connect)
                                if [[ "$cur" == -* ]]; then
                                    COMPREPLY=( $( compgen -W '--private
                                        --nowait --timeout' -- "$cur" ) )
                                else
                                    if [[ "$prev" == "connect" ]]; then
                                        _nmcli_ap_ssid
                                    else
                                        COMPREPLY=( $( compgen -W 'password
                                            wep-key-type iface bssid name' \
                                            -- "$cur" ) )
                                    fi
                                fi
                                return
                                ;;
                        esac

                        COMPREPLY=( $( compgen -W 'list connect' -- "$cur" ) )
                        return
                        ;;
                esac

                COMPREPLY=( $( compgen -W 'status list disconnect wifi' \
                    -- "$cur" ) )
                ;;
        esac

    fi

} &&
complete -F _nmcli nmcli

# ex: filetype=sh
