#
# Bash Completion routine for berate_ap
#

_use_filedir() {
    if [[ $(type -t _filedir) == "function" ]]; then
        _filedir
        return 0
    fi
    return 1
}

_berate_ap() {
    local awk_cmd='
        ($1 ~ /^-/) {
            for (i = 1; i <= NF; i++) {
                if ($i ~ /,$/) {
                    print substr ($i, 0, length ($i)-1)
                }
                else {
                    print $i
                    break
                }
            }
        }
    '

    local cur prev opts
    COMPREPLY=()
    cur="$2"
    prev="$3"
    opts=$("$1" --help | awk "$awk_cmd")

    case "$prev" in
        -h|--help)
            # No Options
            ;;
        --version)
            # No Options
            ;;
        -c)
            # Refer http://en.wikipedia.org/wiki/List_of_WLAN_channels
            opts=$(
                iw list | grep ' MHz \[[[:digit:]]\+\] ' |
                grep -v 'no IR\|disabled' |
                sed 's/.*\[\(.*\)\].*/\1/' | sort -n | uniq
            )
            ;;
        -w)
            opts="1 2 1+2"
            ;;
        -n)
            # No Options
            ;;
        -m)
            opts="nat bridge none"
            ;;
        --psk)
            # No Options
            ;;
        --hidden)
            # No Options
            ;;
        --mac-filter)
            # No Options
            ;;
        --mac-filter-accept)
            # No Options
            ;;
        --ieee80211n)
            # No Options
            ;;
        --ht_capab)
            # Refer http://w1.fi/cgit/hostap/plain/hostapd/hostapd.conf
            opts='
                [LDPC] [HT40-] [HT40+] [SMPS-STATIC] [SMPS-DYNAMIC]
                [GF] [SHORT-GI-20] [SHORT-GI-40] [TX-STBC]
                [RX-STBC1] [RX-STBC12] [RX-STBC123] [DELAYED-BA]
                [MAX-AMSDU-7935] [DSSS_CCK-40] [40-INTOLERANT]
                [LSIG-TXOP-PROT]
            '
            ;;
        --country)
            local reg_file=/usr/lib/crda/regulatory.bin
            if command -v regdbdump > /dev/null && [[ -f "$reg_file" ]]; then
                local country_awk_cmd='
                    ($1 ~ /^country/) {
                        print substr ($2, 0, length ($2)-1)
                    }
                '
                opts=$(regdbdump "$reg_file" 2>/dev/null | awk "$country_awk_cmd")
            else
                opts='
                    AD AE AF AI AL AM AN AR AS AT AU AW AZ BA BB BD BE
                    BF BG BH BL BM BN BO BR BS BT BY BZ CA CF CH CI CL
                    CN CO CR CX CY CZ DE DK DM DO DZ EC EE EG ES ET FI
                    FM FR GB GD GE GF GH GL GP GR GT GU GY HK HN HR HT
                    HU ID IE IL IN IR IS IT JM JO JP KE KH KN KP KR KW
                    KY KZ LB LC LI LK LS LT LU LV MA MC MD ME MF MH MK
                    MN MO MP MQ MR MT MU MW MX MY NG NI NL NO NP NZ OM
                    PA PE PF PG PH PK PL PM PR PT PW PY QA RE RO RS RU
                    RW SA SE SG SI SK SN SR SV SY TC TD TG TH TN TR TT
                    TW TZ UA UG US UY UZ VC VE VI VN VU WF WS YE YT ZA
                    ZW 00
                '
            fi
            ;;
        --freq-band)
            opts="2.4 5"
            ;;
        --driver)
            # Refer http://w1.fi/cgit/hostap/tree/src/drivers
            # Not going to implement
            ;;
        --no-virt)
            # No Options
            ;;
        --no-haveged)
            # No Options
            ;;
        --fix-unmanaged)
            # No Options
            ;;
        --mac)
            # Not going to implement
            ;;
        --daemon)
            # No Options
            ;;
        --stop)
            local stop_awk_cmd='$1 ~ /^[0-9]+$/'
            opts=$("$1" --list-running | awk "$stop_awk_cmd")
            ;;
        --list-running)
            # No Options
            ;;
        --list-clients)
            local clients_awk_cmd='$1 ~ /^[0-9]+$/'
            opts=$("$1" --list-running | awk "$clients_awk_cmd")
            ;;
        --no-dns)
            # No Options
            ;;
        --dhcp-dns)
            # Not going to implement
            ;;
        --mkconfig)
            _use_filedir && return 0
            ;;
        --config)
            _use_filedir && return 0
            ;;
        -g)
            # Not going to implement
            ;;
        -d)
            # No Options
            ;;
        *)
            ;;
    esac

    COMPREPLY=( $(compgen -W "$opts" -- $cur) )
    return 0
}
complete -F _berate_ap berate_ap

# vim: set ft=sh:
