# shellcheck shell=bash disable=2016,2034

___x_cmd_advise_complete_elv(){
    local op="$1"
    case "$op" in
        code|normal)
                shift; ___x_cmd_advise_complete_elv___"$op" "$@" ;;
        x-cmd)  shift; ___x_cmd_advise_complete_elv___x_cmd "$@" ;;
        *)      N=advise M="advise complete elv not support this [option=$op]" log:ret:64 ;;
    esac
}


___x_cmd_advise_complete_elv___normal(){
    local ___X_CMD_ADVISE_MAX_ITEM=500
    local cur="${*: -1}"
    local COMP_WORDS=("$@");    local COMP_LINE="$*"
    local COMP_CWORD="$#";      COMP_CWORD=$((COMP_CWORD-1))
    local op="$1"
    case "$op" in
        a:*)  op="@${op#"a:"}" ;;
    esac
    local x_;   ___x_cmd_advise___main __run_filepath_ "$op" || return $?
    shift;
    ___x_cmd_advise_complete___gen_wordlist \
        "$___X_CMD_ROOT_MOD/advise/lib/awk/advise/advise.compgen_wordlist.elv.awk" \
        "$x_" "$@"
}

___x_cmd_advise_complete_elv___x_cmd(){
    local ___X_CMD_ADVISE_MAX_ITEM=500
    local cur="${*: -1}"
    local COMP_WORDS=("$@");    local COMP_LINE="$*"
    local COMP_CWORD="$#";      COMP_CWORD=$((COMP_CWORD-1))

    local x_;   ___x_cmd_advise___main __run_filepath_ x-cmd "$1" || return $?
    shift;
    ___x_cmd_advise_complete___gen_wordlist \
        "$___X_CMD_ROOT_MOD/advise/lib/awk/advise/advise.compgen_wordlist.elv.awk" \
        "$x_" "$@"
}

# eval ( x advise complete elv code | slurp )
___x_cmd_advise_complete_elv___code(){
    local x_=; ___x_cmd_advise_autoload_get_ || return 0
    local autoload_op="$x_"
    if [ "$autoload_op" != never ]; then
        {
            printf "%s\n" "x"
        } | ___x_cmd_advise_complete_elv___code_inner normal

        [ "$autoload_op" = "x" ] || ___x_cmd_advise_man_ls x-cmd | ___x_cmd_advise_complete_elv___code_inner x-cmd
    fi
}

___x_cmd_advise_complete_elv___code_inner(){
    local func="$1"
    local l=; local list=
    while read -r l; do
        list="${list} ${l}"
    done

    printf "put %s | %s\n" "$list" '{
    each {|c|
        set edit:completion:arg-completer[$c] = {|@a|
            eval ( x advise complete elv '"$func"' $@a | slurp ) 2>/dev/null
        }
    }
}
    '
}
