# shellcheck shell=dash
xrc ourl
___x_cmd_openai_model(){
    [ $# -gt 0 ]    ||  set - ls

    local op="$1"; shift
    case "$op" in
        ls|ll|get|set)  ___x_cmd_openai_model_"$op" "$@"            ;;
        --help|-h)      ___x_cmd help -m openai model               ;;
        *)              ___x_cmd help -m openai model >&2; return 1 ;;
    esac
}

___x_cmd_openai_model_get(){
    local X_help_cmd='___x_cmd help -m openai model get'; help:arg:parse
    local model=""; ___x_cmd_openai_cur model:=  2>/dev/null
    printf "%s\n" "$model"
}

___x_cmd_openai_model_set(){
    local X_help_cmd='___x_cmd help -m openai model set'; help:arg-null:parse
    local model="$1"
    ___x_cmd_openai_cfg set model="$model"
}

___x_cmd_openai_model_ll(){
    local X_help_cmd='___x_cmd help -m openai model ll'; help:arg:parse
    ___x_cmd_openai_model_ls___csv | ___x_cmd csv static_tab
}

___x_cmd_openai_model_ls(){
    [ $# -gt 0 ]    ||      set - --app
    local op="$1"; shift
    local format=
    case "$op" in
        --csv|--app|--fast)
                    format="${op#--}" ;;
        -j|--json)  format=json      ;;
        -y|--yml)   format=yml       ;;
        -h|--help)  ___x_cmd help -m openai model ls "$@"; return ;;
        *)          M="Not support $op" N=openai log:ret:1 ;;
    esac

    "___x_cmd_openai_model_ls___${format}" "$@"
}

___x_cmd_openai_model_ls___app(){
    if ! { ___x_cmd_is_stdout2tty && ___x_cmd_runmode_allow_manual; }; then
        ___x_cmd_openai_model_ls___csv "$@"
        return $?
    fi

    local ___X_CMD_CSV_APP_DATA_CURROW=
    local data; data="$( ___x_cmd_openai_model_ls___csv )" || ourl:data:ret
    ___x_cmd_pipevar    data    ___x_cmd csv --app --return line
    local model="${___X_CMD_CSV_APP_DATA_CURROW%%,*}"
    [ -n "$model" ] || return $?

    local id=
    ___x_cmd ui select id "NEXT" \
        "Set the [model=$model] as the default model for OpenAI" \
        "Stdout the model name" \
        "return" || return $?

    case "$id" in
        1)  ___x_cmd_openai_cfg model="$model"
            openai:info "Successfully set [model=$model] as the default model for OpenAI"
            ;;
        2)  printf "%s\n" "$model" ;;
        *)  return ;;
    esac
}

___x_cmd_openai_model_ls___csv(){
    local data; data="$( ___x_cmd_openai_model_ls___raw )" || ourl:data:ret
    ___x_cmd_pipevar    data    ___x_cmd jo .data \
        | ___x_cmd jo 2c .id .object .created .owned_by \
        | ___x_cmd awk -v FS=, '($0 ~ "gpt|^o[0-9]"){ print $0; }' \
        | ___x_cmd csv header --add "Id,Object,Created,Owned By"
}

___x_cmd_openai_model_ls___json(){
    local data; data="$( ___x_cmd_openai_model_ls___raw )" || ourl:data:ret
    ___x_cmd_pipevar    data    ___x_cmd jo fmt
}

___x_cmd_openai_model_ls___yml(){
    local data; data="$( ___x_cmd_openai_model_ls___raw )" || ourl:data:ret
    ___x_cmd_pipevar    data    ___x_cmd j2y
}

___x_cmd_openai_model_ls___fast(){
    local apikey=; local proxy=
    ___x_cmd_openai_cur apikey:= proxy:= 2>/dev/null

    if [ -z "$apikey" ] || [ ! -f "$( ___x_cmd ccmd which ___x_cmd proxy runifset "$proxy" ___x_cmd curl --fail -H "Authorization: Bearer $apikey" "$___X_CMD_OPENAI_DEFAULT_ENDPOINT/v1/models" )" ]; then
        printf "%s\n" gpt-5 gpt-5-mini gpt-5-nano gpt-5-chat-latest gpt-4.1 gpt-4.1-mini gpt-4.1-nano gpt-4o gpt-4o-mini o1-mini
    else
        ___x_cmd_openai_model_ls___csv | ___x_cmd awk -v FS=, 'NR>1{ print $1; }'
    fi
}

___x_cmd_openai_model_ls___raw(){
    ___x_cmd_openai_has_apikey || return $?

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

    ___x_cmd ccmd 1d -- ___x_cmd proxy runifset "$proxy" ___x_cmd curl --fail \
        -H "Authorization: Bearer $apikey" \
        "$___X_CMD_OPENAI_DEFAULT_ENDPOINT/v1/models"
}
