# shellcheck shell=dash
___x_cmd_chat_request___type_prompt(){
    if [ $# -eq 2 ]; then
        if [ -t 0 ]; then   ___x_cmd ted
        else                ___x_cmd_cmds_cat
        fi | ___x_cmd_chat_request___type_prompt_file "$@"
    else
        (
            shift 2
            local IFS=" "
            printf "%s\n" "$*"
        ) | ___x_cmd_chat_request___type_prompt_file "$1" "$2"
    fi
}

___x_cmd_chat_request___type_prompt_lineno(){
    if [ $# -eq 2 ]; then
        if [ -t 0 ]; then   ___x_cmd ted
        else                ___x_cmd_cmds_cat
        fi | ___x_cmd_chat_request___type_prompt_lineno_file "$@"
    else
        (
            shift 2
            local IFS=" "
            printf "%s\n" "$*"
        ) | ___x_cmd_chat_request___type_prompt_lineno_file "$1" "$2"
    fi
}

___x_cmd_chat_request___type_prompt_file(){
    local type="$1"
    local prompt="$2";  shift 2

    local user_message;
    if [ -n "$1" ]; then    user_message="$(___x_cmd_cmds_cat "$1")"
    else                    user_message="$(___x_cmd_cmds_cat)"
    fi
    [ -n "$user_message" ] || return $?
    user_message="${prompt}${user_message}"

    # local msg; msg='{
    #     role: user,
    #     content: '$(___x_cmd_chat_jqu "$user_message")'
    # }'

    ___x_cmd_chat_request_impl --type "${type}" --history 0 --question "$user_message"
}

___x_cmd_chat_request___type_prompt_lineno_file(){
    local type="$1"
    local prompt="$2";  shift 2

    local user_message;
    if [ -n "$1" ]; then    user_message="$(___x_cmd_cmds_cat -n "$1")"
    else                    user_message="$(___x_cmd_cmds_cat -n)"
    fi
    [ -n "$user_message" ] || return $?
    user_message="${prompt}${user_message}"

    # local msg; msg='{
    #     role: user,
    #     content: '$(___x_cmd_chat_jqu "$user_message")'
    # }'

    ___x_cmd_chat_request_impl --type "${type}" --history 0 --question "$user_message"
}

# ___x_cmd_chat_request___question_ "$question" || return $?
# question="$x_"

___x_cmd_chat_request___question_(){
    if [ -n "$*" ]; then
        x_="$*"
    else
        x_="$(
            if [ -t 0 ]; then   ___x_cmd ted
            else                ___x_cmd_cmds_cat
            fi
        )"
    fi
}

___x_cmd_chat_request___question_lineno_(){
    if [ -n "$*" ]; then
        x_="$( printf "%s\n" "$*" | ___x_cmd_cmds_cat -n ) "
    else
        x_="$(
            if [ -t 0 ]; then   ___x_cmd ted | ___x_cmd_cmds_cat -n
            else                ___x_cmd_cmds_cat
            fi
        )"
    fi
}

___x_cmd_chat_request___question_file_(){
    if [ -n "$1" ]; then    x_="$(___x_cmd_cmds_cat "$1")"
    else                    x_="$(___x_cmd_cmds_cat)"
    fi
}

___x_cmd_chat_request___question_lineno_file_(){
    if [ -n "$1" ]; then    x_="$(___x_cmd_cmds_cat -n "$1")"
    else                    x_="$(___x_cmd_cmds_cat -n)"
    fi
}

___x_cmd_chat_request___preparequestion_(){
    local question="$1"
    local inputtype="$2"
    local numbered="$3"
    local inputdesc="$4"

    x_=""
    case "$inputtype" in
        pipe)
            ___x_cmd_chat_request___preparequestion_pipe_ || return $?
            x_="${x_} ${question}"
            ;;
        edit)
            ___x_cmd_chat_request___preparequestion_edit_ || return $?
            x_="${question} ${x_}"
            ;;
        none)
            if [ -n "$question" ]; then
                x_="$question"
            else
                if ___x_cmd_runmode_allow_chatty; then
                    if [ -t 0 ]; then
                        ___x_cmd_chat_request___preparequestion_edit_ || return $?
                    else
                        ___x_cmd_chat_request___preparequestion_pipe_ || return $?
                    fi
                else
                    chat:error "question is empty while input mode is eithor --pipe nor --edit"
                    return 64
                fi
            fi
            ;;
    esac
}

___x_cmd_chat_request___preparequestion_pipe_(){
    if [ -z "$numbered" ]; then x_=$(___x_cmd_cmds_cat)
    else                        x_=$(___x_cmd_cmds_cat -n)
    fi

    [ -z "$inputdesc" ] || {
        ___x_cmd_chat___wrap_ "$inputdesc" "$x_"
    }
}

___x_cmd_chat_request___preparequestion_edit_(){
    if [ -z "$numbered" ]; then x_=$(___x_cmd ted)
    else                        x_=$(___x_cmd ted | ___x_cmd_cmds_cat -n)
    fi
}
