# 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 == 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
