#!/bin/bash
# MiniLlama — Portable LLM Chat Launcher (Linux)
# Erkennt automatisch alle .gguf-Modelle im models/-Ordner und zeigt ein Menü.
# Default: LFM2-8B-A1B-UD-Q4_K_XL (Testsieger)
set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
cd "$SCRIPT_DIR"

# ------------------------------------------------------------
# Default-Modell (Testsieger: beste CPU-Performance + Qualität)
# ------------------------------------------------------------
DEFAULT_MODEL="LFM2-8B-A1B-UD-Q4_K_XL.gguf"

# ------------------------------------------------------------
# Modelle aus dem models/-Ordner lesen
# ------------------------------------------------------------
mapfile -t MODELS < <(find models/ -maxdepth 1 -name '*.gguf' -type f -o -type l | sort)
MODEL_COUNT="${#MODELS[@]}"

if [ "$MODEL_COUNT" -eq 0 ]; then
    echo "❌ Keine .gguf-Modelle im models/-Ordner gefunden."
    echo "   Lege GGUF-Dateien in das models/-Verzeichnis."
    exit 1
fi

# ------------------------------------------------------------
# Menü anzeigen
# ------------------------------------------------------------
echo ""
echo "╔═══════════════════════════════════╗"
echo "║    🦙 MiniLlama — Modellauswahl  ║"
echo "╚═══════════════════════════════════╝"
echo ""
for i in "${!MODELS[@]}"; do
    NAME=$(basename "${MODELS[$i]}")
    SIZE=$(numfmt --to=iec --format='%.1f' "$(stat --printf='%s' -L "${MODELS[$i]}" 2>/dev/null)" 2>/dev/null || echo "?")
    DEFAULT_MARKER=""
    if [ "$NAME" = "$DEFAULT_MODEL" ]; then
        DEFAULT_MARKER="  ← Standard"
    fi
    printf "  %2d) %s  (%s)%s\n" $((i + 1)) "$NAME" "$SIZE" "$DEFAULT_MARKER"
done
echo ""

# ------------------------------------------------------------
# Auswahl (Default bei Enter)
# ------------------------------------------------------------
SELECTION=""
while [ -z "$SELECTION" ]; do
    read -rp "Auswahl [1-$MODEL_COUNT, Enter=$DEFAULT_MODEL, q=beenden]: " INPUT
    if [ "$INPUT" = "q" ]; then exit 0; fi
    if [ -z "$INPUT" ]; then
        # Default-Modell finden
        for i in "${!MODELS[@]}"; do
            if [[ "$(basename "${MODELS[$i]}")" == "$DEFAULT_MODEL" ]]; then
                SELECTION=$i
                break
            fi
        done
        if [ -z "$SELECTION" ]; then
            echo "❌ Default-Modell $DEFAULT_MODEL nicht gefunden, wähle erstes."
            SELECTION=0
        fi
    elif [[ "$INPUT" =~ ^[0-9]+$ ]] && [ "$INPUT" -ge 1 ] && [ "$INPUT" -le "$MODEL_COUNT" ]; then
        SELECTION=$((INPUT - 1))
    else
        echo "❌ Bitte eine Zahl zwischen 1 und $MODEL_COUNT eingeben."
    fi
done

MODEL_PATH="${MODELS[$SELECTION]}"
MODEL_NAME=$(basename "$MODEL_PATH")

echo ""
echo "🔵 Starte: $MODEL_NAME"
echo ""

# ------------------------------------------------------------
# llama-cli starten
# ------------------------------------------------------------
exec ./bin/linux/llama-cli -m "$MODEL_PATH" -cnv
