# voxl-rc-server bash completion (portable, no assoc-arrays)
# --------------------------------------------------------------
_voxl_rc_server()
{
    local cur prev words cword
    _init_completion -n : || return   # from bash-completion library

    # ----- helper: test if option already present -----------------
    _opt_used() {
        local o="$1"; shift
        local w
        for w in "${words[@]}"; do
            [[ $w == "$o" ]] && return 0
        done
        return 1
    }

    # ----- suggestions after --rx --------------------------------
    if [[ $prev == --rx ]]; then
        COMPREPLY=( $(compgen -W 'joystick mavlink:' -- "$cur") )
        return
    fi

    # ----- suggestions after --tx --------------------------------
    if [[ $prev == --tx ]]; then
        # device list for crsf:
        local devs; devs=$(compgen -G '/dev/ttyUSB* /dev/ttyACM*' 2>/dev/null)
        if [[ $cur == crsf:* ]]; then
            local prefix='crsf:'
            local part="${cur#crsf:}"
            COMPREPLY=( $(compgen -W "$devs" -- "$part") )
            COMPREPLY=( "${COMPREPLY[@]/#/$prefix}" )
        else
            COMPREPLY=( $(compgen -W 'crsf: mavlink:' -- "$cur") )
        fi
        return
    fi

    # ----- top-level flags ---------------------------------------
    local opts="--rx --tx --bind --rx-debug --debug-state --debug-joystick-publish --debug-mavlink-publish --debug-crsf-publish --list-joysticks --monitor --help -h"
    local suggest=()
    local o
    for o in $opts; do
        case "$o" in
            --rx|--tx)  suggest+=("$o") ;;          # may repeat
            *)
                _opt_used "$o" || suggest+=("$o")
                ;;
        esac
    done
    COMPREPLY=( $(compgen -W "${suggest[*]}" -- "$cur") )
}
complete -F _voxl_rc_server voxl-rc-server
