# shellcheck shell=bash  disable=SC2046

___x_cmd_openai_curl(){
    local op="$1"
    local url="$2"
    shift 2
    local ___X_CMD_RSP_HEADER="\"${___X_CMD_ROOT_TMP}/openai/.____x_cmd_openai_curl_header.$$\""

    ___x_cmd_openai_cur apikey:= proxy:= 2>/dev/null

    [ -n "${apikey}" ] || N=openai M="apikey is null. run 'x openai --cfg set apikey=\<apikey\>' add apikey"  log:ret:1

    local content_type
    [ "$op" = "post" ] || content_type="Content-Type: multipart/form-data"

    local _curl_header="Authorization: Bearer ${apikey}
${content_type:-"Content-Type: application/json"}
${___X_CMD_OPENAI_HEADER}"

    _curl_header="$(___x_cmd curl gencode "${_curl_header}")"
    local endpoint; ___x_cmd_openai_cur endpoint:= 2>/dev/null
    local _curl_url="${endpoint:-"$___X_CMD_OPENAI_DEFAULT_ENDPOINT"}/v1${url}"

    local method; local openai_request_data
    case "$op" in
        get)
            method="GET"
            openai_request_data="$(eval "printf '%s ' $(___x_cmd curl gencode $(___x_cmd_openai_curl___use_query_data "$op" "$@"))")"
            ;;
        upload)
            method="POST"
            openai_request_data="$(eval "printf '%s ' $(___x_cmd curl gencode $(___x_cmd_openai_curl___use_query_data "$op" "$@"))")"
            ;;
        post)
            method="POST"
            openai_request_data="$(___x_cmd curl gencode "$@")" ;;
    esac

    ___x_cmd mkdirp "$___X_CMD_ROOT_TMP/openai"
    openai:debug "___x_cmd curl  ${proxy:+-x} ${proxy:+$proxy}   -X  ${method}  -D  ${___X_CMD_RSP_HEADER}   $_curl_header   ${output_path:+-o}   ${output_path:+$output_path}     $openai_request_data   $_curl_url"
    eval          ___x_cmd curl  ${proxy:+-x} ${proxy:+"$proxy"} -X "${method}" -D "${___X_CMD_RSP_HEADER}" "$_curl_header"  ${output_path:+-o}   ${output_path:+"$output_path"}  "$openai_request_data" "$_curl_url"
}

___x_cmd_openai_curl___use_query_data(){
    [ $# -gt 0 ] || return $?
    printf "%s " "-G"
    local name=""
    local op="$1"; shift
    for name in "$@"; do
        case "$name" in
            _file_path)    printf "%s " "file=@${_file_path}"      ;;
            _image_path)   printf "%s " "image=@${_image_path}"    ;;
            *)
                if [ "$op" = "get" ]; then
                    printf "%s " "$name=="
                else
                    printf "%s " "$name="
                fi
                ;;
        esac
    done
}
