# shellcheck shell=bash disable=2034

xrc:mod:lib     advise      complete/elv    complete/nu     complete/onsh   complete/fish   complete/tcsh

___x_cmd_advise_complete(){
    local op="$1"
    case "$op" in
        elv|nu|onsh|fish|tcsh)
                shift; ___x_cmd_advise_complete_"$op" "$@" ;;
        *)      N=advise M="advise complete not support this [option=$op]" log:ret:64 ;;
    esac
}

___x_cmd_advise_complete___gen_wordlist(){
    xrc:mod:lib advise  helper

    local awkfp="$1";   [ -f "$awkfp" ] || return $?
    local advfp="$2";   [ -f "$advfp" ] || return $?
    shift 2
    local candidate_arr=(); local candidate_exec_arr=(); local candidate_nospace_arr=();
    local candidate_exec=; local offset=; local ___X_CMD_ADVISE_RUN_SET_NOSPACE=; local candidate_prefix=
    local candidate_exec_stdout=;   local candidate_exec_stdout_nospace=; local _message_str=
    eval "$( ___x_cmd_advise___main __get_result_from_awk_ "$advfp" "$@" )" 2>/dev/null || return $?

    local IFS="$___X_CMD_ADVISE_IFS_INIT"
    cur="${cur#"$candidate_prefix"}"
    [ -z "$candidate_exec" ]                || eval "$candidate_exec" 2>/dev/null 1>&2
    [ -z "$candidate_exec_stdout" ]         || ___x_cmd_advise_exec___stdout
    [ -z "$candidate_exec_stdout_nospace" ] || ___x_cmd_advise_exec___stdout_nospace

    [ -z "${candidate_exec_arr[*]}" ]       || candidate_arr+=( "${candidate_exec_arr[@]}" )

    local maxitem="${___X_CMD_ADVISE_MAX_ITEM:-0}"
    COMPREPLY=( "${COMPREPLY[@]:0:$maxitem}" )
    maxitem="$(( maxitem - ${#COMPREPLY[@]} ))"

    {
        [ -z "${candidate_arr[*]}" ] || printf " \002%s\n" "${candidate_arr[@]}"
        [ -z "${candidate_nospace_arr[*]}" ] || printf "\002%s\n" "${candidate_nospace_arr[@]}"
    } | ___x_cmd awk0 -v FS="\002" -v current="$cur" -v maxitem="$maxitem" \
        -v ADVISE_WITHOUT_DESC="$___X_CMD_ADVISE_WITHOUT_DESC" -v candidate_prefix="$candidate_prefix" \
        -m j/json -m j/jiter -f "$awkfp"
}
