#!/bin/bash
# Kipinä Node — lataa oikea binääri ja käynnistä
set -e

BASE_URL="https://kipina.studio/download"
HUB_URL="${KIPINA_HUB:-wss://kipina.studio/ws}"
OLLAMA_URL="${OLLAMA_URL:-http://localhost:11434}"

# Tunnista OS ja arkkitehtuuri
OS=$(uname -s | tr '[:upper:]' '[:lower:]')
ARCH=$(uname -m)

case "$OS-$ARCH" in
    darwin-arm64)  BINARY="kipina-node-macos-arm64" ;;
    darwin-x86_64) BINARY="kipina-node-macos-arm64" ;; # Rosetta
    linux-x86_64)  BINARY="kipina-node-linux-x86_64" ;;
    linux-aarch64) BINARY="kipina-node-linux-arm64" ;;
    *) echo "Ei tuettu: $OS-$ARCH"; exit 1 ;;
esac

echo ""
echo "  ╔══════════════════════════════════════╗"
echo "  ║       Kipinä Agentic Node            ║"
echo "  ╚══════════════════════════════════════╝"
echo ""
echo "  OS: $OS ($ARCH)"
echo ""

# Etsi Ollama-instanssit
CANDIDATES=(
    "http://localhost:11434"
    "http://127.0.0.1:11434"
    "http://ollama:11434"
    "http://host.docker.internal:11434"
)

# Lisää OLLAMA_URL listaan jos asetettu ja ei jo mukana
if [ -n "$OLLAMA_URL" ]; then
    ALREADY=false
    for c in "${CANDIDATES[@]}"; do
        [ "$c" = "$OLLAMA_URL" ] && ALREADY=true
    done
    $ALREADY || CANDIDATES=("$OLLAMA_URL" "${CANDIDATES[@]}")
fi

echo "  Etsitään Ollama-instansseja..."
FOUND=()
for url in "${CANDIDATES[@]}"; do
    if curl -s --connect-timeout 1 "$url/api/tags" &>/dev/null; then
        FOUND+=("$url")
    fi
done

if [ ${#FOUND[@]} -eq 0 ]; then
    # Ei löytynyt — yritä käynnistää lokaali
    if command -v ollama &>/dev/null; then
        echo "  Käynnistetään Ollama..."
        ollama serve &>/dev/null &
        sleep 3
        if curl -s --connect-timeout 1 "http://localhost:11434/api/tags" &>/dev/null; then
            OLLAMA_URL="http://localhost:11434"
            echo "  ✓ Ollama käynnistetty ($OLLAMA_URL)"
        else
            echo "  ✗ Ollaman käynnistys epäonnistui."
            exit 1
        fi
    else
        echo ""
        echo "  ✗ Ollamaa ei löytynyt."
        echo "    Kontti/remote: OLLAMA_URL=http://HOST:11434 ./kipina-node"
        echo "    Asenna:        curl -fsSL https://ollama.ai/install.sh | sh"
        exit 1
    fi
elif [ ${#FOUND[@]} -eq 1 ]; then
    OLLAMA_URL="${FOUND[0]}"
    echo "  ✓ Ollama löytyi: $OLLAMA_URL"
else
    echo ""
    echo "  Löytyi ${#FOUND[@]} Ollama-instanssia:"
    echo ""
    for i in "${!FOUND[@]}"; do
        echo "    $((i+1))) ${FOUND[$i]}"
    done
    echo ""
    read -p "  Valitse [1-${#FOUND[@]}]: " -r CHOICE
    if [[ "$CHOICE" =~ ^[0-9]+$ ]] && [ "$CHOICE" -ge 1 ] && [ "$CHOICE" -le ${#FOUND[@]} ]; then
        OLLAMA_URL="${FOUND[$((CHOICE-1))]}"
    else
        OLLAMA_URL="${FOUND[0]}"
        echo "  Käytetään oletusta: $OLLAMA_URL"
    fi
    echo "  ✓ Valittu: $OLLAMA_URL"
fi

echo ""
echo "  Hub: $HUB_URL"
echo "  Ollama: $OLLAMA_URL"
if [ -n "$KIPINA_MODEL" ]; then
    echo "  Malli: $KIPINA_MODEL (Ympäristömuuttujasta)"
fi

# Lataa binääri
BIN_PATH="./kipina-node-bin"
if [ -f "$BIN_PATH" ]; then
    echo ""
    read -p "  Löydettiin vanha kipina-node-bin lokaalisti. Haluatko poistaa sen ja ladata uusimman version? [Y/n] " -r DEL_CHOICE
    if [[ "$DEL_CHOICE" =~ ^[Nn]$ ]]; then
        echo "  ✓ Käytetään lokaalia versiota."
    else
        rm -f "$BIN_PATH"
        echo "  ✓ Vanha binääri poistettu ja korvataan uudella."
    fi
fi

if [ ! -f "$BIN_PATH" ]; then
    echo "  Ladataan tuorein $BINARY..."
    curl -sSL "$BASE_URL/$BINARY" -o "$BIN_PATH"
    chmod +x "$BIN_PATH"
fi

echo ""
echo "  ✓ Siirrytään Kipinä Noden hallintaan..."
echo "    Ctrl+C pysäyttää"
echo ""

if [ -n "$KIPINA_MODEL" ]; then
    export OLLAMA_MODEL="$KIPINA_MODEL"
fi
export HUB_URL="$HUB_URL"
export OLLAMA_URL="$OLLAMA_URL"
exec "$BIN_PATH"
