# shellcheck shell=dash

___X_CMD_MD_LLM_LINES_LESS=50

___x_cmd_md_llm(){
    local IS_SHOW_ROTATE=""
    local IS_LESS_DISABLE="$___X_CMD_MD_LLM_LESS_DISABLE"
    while [ $# -gt 0 ]; do
        case "$1" in
            -h|--help)  ___x_cmd help -m md llm;    return  ;;
            --rotate)   IS_SHOW_ROTATE=1;           shift   ;;
            --noless)   IS_LESS_DISABLE=1;          shift   ;;
            --print-exitcode)
                        printf "\nXCMD_MD_LLM_EXITCODE:%s\n" "$2";       return ;;
            *)          break ;;
        esac
    done

    [ $# -gt 0 ] || set -- -
    local fp="$1"
    local content;
    if [ -z "$IS_SHOW_ROTATE" ]; then   content="$(___x_cmd_cmds_cat "$fp")"
    else                                content="$(___x_cmd_cmds_cat "$fp" | ___x_cmd ui rotate -n 10 --text-style cyan --clear --raw )"
    fi
    [ -n "$content" ] || return 0

    local line;     line="$(___x_cmd_cmds wc -l <<A
$content
A
)"

    if [ -z "$IS_LESS_DISABLE" ] && [ "$line" -gt "$___X_CMD_MD_LLM_LINES_LESS" ]; then
        ___x_cmd_md_llm_parse | ___x_cmd_md_llm_lessviewer
    else
        ___x_cmd_md_llm_parse
    fi
    # if more than 30 lines, using less
}

___x_cmd_md_llm_lessviewer(){
    # if </dev/null ___x_cmd_cmds less --use-color >/dev/null ; then
    if (___x_cmd_cmds less --help | ___x_cmd_cmds grep 'use-color' ) 1>/dev/null 2>/dev/null; then
        local prompt="Press q to QUIT, h for HELP"
        case "$LANG" in
            zh_CN*)     prompt="q 退出 | h 帮助"
        esac
        ___x_cmd_cmds less -r --use-color --prompt "$prompt"
    else
        ___x_cmd_cmds less -R
    fi
}

___x_cmd_md_llm_parse(){
    ___x_cmd_cmds awk   \
        -f "$___X_CMD_ROOT_MOD/awk/lib/re.awk"    \
        -f "$___X_CMD_ROOT_MOD/md/lib/awk/llm/xxxdetect.awk"    \
        -f "$___X_CMD_ROOT_MOD/md/lib/awk/llm/xxxbody.awk"      \
        -f "$___X_CMD_ROOT_MOD/md/lib/awk/llm/xxxcodeblock.awk" \
        -f "$___X_CMD_ROOT_MOD/md/lib/awk/llm/xxxmd.awk"        \
        -f "$___X_CMD_ROOT_MOD/md/lib/awk/llm/xxxmain.awk" <<A
$content
A
}
