# shellcheck shell=dash
___x_cmd_ollama_ls(){
    if ___x_cmd_is_stdout2tty && ___x_cmd_runmode_allow_chatty; then
        ___x_cmd_ollama_ls___app
    else
        ___x_cmd_ollama_ls___csv
    fi
}



___x_cmd_ollama_ls___csv(){
    local data; data="$( ___x_cmd_ollama_ls___raw )" || return $?
    ___x_cmd csv convert --left-align-header <<A
${data}
A
}

___x_cmd_ollama_ls___raw(){
    ___x_cmd_ollama___bin ls
}


___x_cmd_ollama_ls___app(){
    local data;
    data="$( ___x_cmd_ollama_ls___csv )" || return 0

    [ -n "${data#*MODIFIED}" ] || {
        ollama:info "No local models found"
        return 0
    }

    local ___X_CMD_CSV_APP_DATA_NAME
    local ___X_CMD_CSV_APP_DATA_ID
    local ___X_CMD_CSV_APP_DATA_SIZE
    local ___X_CMD_CSV_APP_DATA_MODIFIED

    ___x_cmd_pipevar data ___x_cmd csv app --clear --return var || return $?

    [ -n "$___X_CMD_CSV_APP_DATA_NAME" ] || return 0

    local id
    ___x_cmd ui select id   "Next"  \
        "x ollama run       $___X_CMD_CSV_APP_DATA_NAME"        \
        "x ollama info      $___X_CMD_CSV_APP_DATA_NAME"        \
        "x ollama browse    $___X_CMD_CSV_APP_DATA_NAME"        \
        "x ollama rm        $___X_CMD_CSV_APP_DATA_NAME"        \
        "return 0" || return $?

    ___x_cmd ensurefp "$___X_CMD_OLLAMA_RUN_LASTFP"
    printf "%s\n" "$___X_CMD_CSV_APP_DATA_NAME" >"$___X_CMD_OLLAMA_RUN_LASTFP"

    case "$id" in
        1)  ___x_cmd ollama run       "$___X_CMD_CSV_APP_DATA_NAME" ;;
        2)  ___x_cmd ollama info      "$___X_CMD_CSV_APP_DATA_NAME" ;;
        3)  ___x_cmd ollama browse    "$___X_CMD_CSV_APP_DATA_NAME" ;;
        4)  ___x_cmd_ollama___bin rm  "$___X_CMD_CSV_APP_DATA_NAME" ;;
        *)  return 0
    esac
}

