# shellcheck shell=dash

# Create ___X_CMD_JO_NAV_FINAL_COMMAND ___X_CMD_JO_NAV_KP ___X_CMD_JO_NAV_VALUE variable
___x_cmd_jo_nav(){
    local op="$1"
    case "$op" in
        -h|--help)  M='jo nav' help:ret:0 ;;
        *)          ___x_cmd_jo_nav_jsonl "$@" ;;
    esac
}

___x_cmd_jo_nav_jsonl(){
    ___X_CMD_JO_NAV_FINAL_COMMAND=
    ___X_CMD_JO_NAV_KP=
    ___X_CMD_JO_NAV_VALUE=

    local x_; ___x_cmd storerat_ ___x_cmd_jo_nav_jsonl___inner "$@" || return $?
    eval "$x_"
}

___x_cmd_jo_nav_jsonl___inner(){
    local ___X_CMD_JO_NAV_JSONL_PROCESSOR=
    local ___X_CMD_JO_NAV_JSONL_ACTION=
    local ___X_CMD_JO_NAV_JSONL_DATA_PROCESSOR=
    local ___X_CMD_JO_NAV_JSONL_CONTINUE_NAME=
    local ___X_CMD_JO_NAV_JSONL_RET_STYLE=
    local NL="${___X_CMD_UNSEENCHAR_NEWLINE}"
    local op; while op="$1"; do
        case "$op" in
            --action)
                        [ -n "$2" ] || N=jo  M="Provide the action key" log:ret:64
                        [ -n "$3" ] || N=jo M="Provide a short description about this action key" log:ret:64
                        [ -n "$4" ] || N=jo M="Provide a log description about this action key" log:ret:64
                        ___X_CMD_JO_NAV_JSONL_ACTION="${___X_CMD_JO_NAV_JSONL_ACTION}${2}${NL}${3}${NL}${4}${NL}"
                        shift 4 ;;
            --processor)
                        ___X_CMD_JO_NAV_JSONL_PROCESSOR="$2";
                        [ -n "$___X_CMD_JO_NAV_JSONL_PROCESSOR" ] || N=jo M="Provide the processor function name" log:ret:64
                        shift 2 ;;
            --continue) ___X_CMD_JO_NAV_JSONL_CONTINUE_NAME="$2"
                        [ -n "$___X_CMD_JO_NAV_JSONL_CONTINUE_NAME" ] || N=jo M="Provide the jo nav name" log:ret:64
                        shift 2 ;;
            --return)   ___X_CMD_JO_NAV_JSONL_RET_STYLE="$2"
                        [ -n "$___X_CMD_JO_NAV_JSONL_RET_STYLE" ] || N=jo M="Provide the style to be selected and returned, [var]" log:ret:64
                        shift 2 ;;
            -h|--help)  M='jo nav jsonl' help:ret:0 ;;
            --)         shift 1; break ;;
            *)          break
        esac
    done

    ___X_CMD_JO_NAV_JSONL_DATA_PROCESSOR="$( "$@" )"
    [ -n "$___X_CMD_JO_NAV_JSONL_DATA_PROCESSOR" ] || N=jo M="The JSON data is empty" log:ret:1
    ___x_cmd_tui_app_processer(){ ___x_cmd_jo_nav_jsonl___processer "$@"; }

    local x_=;
    [ -z "$___X_CMD_JO_NAV_JSONL_CONTINUE_NAME" ] || {
        ___x_cmd tui position get_ "jo_nav_${___X_CMD_JO_NAV_JSONL_CONTINUE_NAME}"
    }
    local _exitcode=
    local ___X_CMD_JO_NAV_CURRENT_POSITION=
    ___X_CMD_JO_NAV_JSONL_ACTION="$___X_CMD_JO_NAV_JSONL_ACTION" \
    ___X_CMD_JO_NAV_JSONL_POSITION="$x_" \
    ___X_CMD_JO_NAV_JSONL_RET_STYLE="$___X_CMD_JO_NAV_JSONL_RET_STYLE" \
    ___x_cmd tui bigapp --clear-on-exit \
        -f "$___X_CMD_ROOT_MOD/tui/lib/eg.comp/navi.comp.awk"  \
        -f "$___X_CMD_ROOT_MOD/jo/lib/nav/jsonl.awk"
    _exitcode="$?"

    unset -f ___x_cmd_tui_app_processer
    [ -z "$___X_CMD_JO_NAV_JSONL_CONTINUE_NAME" ] || {
        ___x_cmd tui position store "jo_nav_${___X_CMD_JO_NAV_JSONL_CONTINUE_NAME}" "$___X_CMD_JO_NAV_CURRENT_POSITION"
    }

    return "$_exitcode"
}

___x_cmd_jo_nav_jsonl___processer(){
    case "$1" in
        data:request)
            if [ -z "$___X_CMD_JO_NAV_JSONL_DATA_PROCESSOR" ]; then
                printf "%s\n" "errexit:Data not found"
            else
                printf "%s\n%s\n" "data:json" "$___X_CMD_JO_NAV_JSONL_DATA_PROCESSOR"
            fi
            ;;
        *)
            if [ -n "$___X_CMD_JO_NAV_JSONL_PROCESSOR" ]; then
                "$___X_CMD_JO_NAV_JSONL_PROCESSOR" "$@"
            fi
            ;;
    esac
}
