# bash completion for rami        -*- shell-script -*-

_rami_listselector()
{
    local cur="$1"
    local list_elems_all="$2"

    local realcur="${cur##*,}"
    local prefix="${cur%$realcur}"
    local elems word

    for word in $list_elems_all
    do
        if ! [[ $prefix == *"$word"* ]]; then
            elems="$word $elems"
        fi
    done
    COMPREPLY=( $(compgen -P "$prefix" -W "$elems" -S ',' -- $realcur) )
    compopt -o nospace
}

_rami_complete() {
    local -r list="$1"
    local -r compopt="$2"
    COMPREPLY=( $(compgen -W "$list" -- "$cur") )
    [[ $COMPREPLY == *= ]] && compopt -o nospace
    [ "$compopt" ] && compopt -o "$compopt"
}

_rami_complete_nr() {
    COMPREPLY=( $(compgen -P "$cur" -W "{0..9}") )
    compopt -o nospace
    compopt -o nosort
}

_rami_complete_list() {
    COMPREPLY=( $(compgen -P "$cur" -S"," -W "$1") )
    compopt -o nospace
    compopt -o nosort
}

_rami_() 
{
    local cur prev #words cword split
    _init_completion -s || return

    local -r app=rami

    case "$prev" in
        --favorite | -f)
            # CC:<mirror-name-part>, mirror-name-part support is not implemented
            local -r heads="$($app --list-country-codes | sed 's|$|:|')"
            _rami_complete "$heads" nospace
            ;;
        --distro | -d)
            _rami_complete "arch"
            ;;
        --country | -c)
            _rami_listselector "$cur" "$($app --list-country-codes)"
            ;;
        --timeout | --timeout-rank)
            _rami_complete_nr
            ;;
        --ignore-countries)
            _rami_complete_list "$($app --list-country-codes)"
            ;;
        --ignore-continents)
            _rami_listselector "$cur" "$($app --list-continent-codes)"
            ;;
        --list-continent-countrycodes | --list-continent-countrynames | --continent-given)
            _rami_complete "$($app --list-continent-codes)"
            ;;
        --ignore-mirrors | -i)
            _rami_complete "\'comma-separated-list-of-partial-mirror-names\'"
            ;;
        --verbosity)
            _rami_complete "least less default more most"
            ;;
        *)
            _rami_complete "$($app --dump-options)"
            ;;
    esac
}
complete -F _rami_    rami 
