#!/bin/bash
# check_dependencies.sh - Prüft, ob alle benötigten Programme und Build-Abhängigkeiten installiert sind.

# Lade die Projekt-Konfiguration, um den Pfad zu minetestmapper zu kennen
CONFIG_FILE_PATH="$(dirname "$0")/config.sh"
if [ ! -f "$CONFIG_FILE_PATH" ]; then
    echo "FEHLER: Konfigurationsdatei config.sh nicht unter ${CONFIG_FILE_PATH} gefunden!"
    exit 1
fi
source "$CONFIG_FILE_PATH"

echo "Starte Überprüfung der System-Abhängigkeiten..."
echo ""

declare -i missing_count=0

# --- Teil 1: Kritische Laufzeit-Programme ---
echo "--- Prüfe Laufzeit-Programme ---"

# Spezieller Check für minetestmapper am Projekt-Pfad
MINETESTMAPPER_FULL_PATH="${BASE_SCRIPT_DIR}/${MINETESTMAPPER_EXEC_NAME}"
if [ -f "$MINETESTMAPPER_FULL_PATH" ]; then
    if [ -x "$MINETESTMAPPER_FULL_PATH" ]; then
        echo "[+] OK: '${MINETESTMAPPER_EXEC_NAME}' ist verfügbar und ausführbar unter: ${MINETESTMAPPER_FULL_PATH}"
    else
        echo "[-] FEHLER: '${MINETESTMAPPER_EXEC_NAME}' gefunden, aber NICHT AUSFÜHRBAR unter: ${MINETESTMAPPER_FULL_PATH}"
        echo "    -> Bitte mit 'chmod +x ${MINETESTMAPPER_FULL_PATH}' korrigieren."
        missing_count=$((missing_count + 1))
    fi
else
    echo "[-] FEHLER: Das Hauptprogramm '${MINETESTMAPPER_EXEC_NAME}' wurde nicht unter dem erwarteten Pfad ${MINETESTMAPPER_FULL_PATH} gefunden."
    missing_count=$((missing_count + 1))
fi

# Checks für andere Programme, die im PATH sein sollten
# HINZUGEFÜGT: sqlite3 und jq
declare -a runtime_deps_in_path=("gdal2tiles.py" "vips" "ss" "bc" "sqlite3" "jq")
for dep in "${runtime_deps_in_path[@]}"; do
    if ! command -v "$dep" &> /dev/null; then
        echo "[-] FEHLER: Das benötigte Programm '$dep' wurde nicht im System-Pfad gefunden."
        missing_count=$((missing_count + 1))
    else
        found_path=$(command -v "$dep")
        echo "[+] OK: '$dep' ist verfügbar unter: ${found_path}"
    fi
done

echo ""
# --- Teil 2: Build-Abhängigkeiten für minetestmapper ---
echo "--- Prüfe Build-Abhängigkeiten (für Debian/Ubuntu-basierte Systeme) ---"
declare -a build_deps=("cmake" "libgd-dev" "libhiredis-dev" "libleveldb-dev" "libpq-dev" "libsqlite3-dev" "zlib1g-dev" "libzstd-dev")

# Prüfen, ob dpkg verfügbar ist, sonst diesen Teil überspringen
if ! command -v "dpkg" &> /dev/null; then
    echo "[!] WARNUNG: 'dpkg' Kommando nicht gefunden. Kann Build-Abhängigkeiten nicht prüfen. (Dies ist normal auf nicht-Debian-Systemen)"
else
    for pkg in "${build_deps[@]}"; do
        # dpkg -s gibt einen Fehlercode zurück, wenn das Paket nicht installiert ist
        if ! dpkg -s "$pkg" &> /dev/null; then
            echo "[-] FEHLER: Das benötigte Build-Paket '$pkg' scheint nicht installiert zu sein."
            missing_count=$((missing_count + 1))
        else
            echo "[+] OK: Build-Paket '$pkg' ist installiert."
        fi
    done
fi

echo "-----------------------------------------------------"

# --- Fazit ---
if [ "$missing_count" -gt 0 ]; then
    echo ""
    echo "Prüfung fehlgeschlagen. Es fehlen ${missing_count} Abhängigkeit(en)."
    echo "Bitte die oben als FEHLER markierten Programme und/oder Pakete installieren bzw. korrigieren."
    echo ""
    echo "Hinweise zur Installation (Beispiele für Debian/Ubuntu):"
    echo "  Laufzeit-Programme:"
    echo "   - minetestmapper: Muss manuell kompiliert oder aus einer anderen Quelle bezogen werden."
    echo "   - gdal-bin: Enthält 'gdal2tiles.py'."
    echo "   - libvips-tools: Enthält 'vips' für die Bildbearbeitung."
    echo "   - iproute2: Enthält 'ss' (meist vorinstalliert)."
    echo "   - bc: Für mathematische Operationen in Skripten."
    echo "   - sqlite3: Zur Abfrage der Spieldatenbanken."
    echo "   - jq: Zur Verarbeitung von JSON in Skripten."
    echo ""
    echo "  Build-Pakete (zum Kompilieren von minetestmapper):"
    echo "   - sudo apt-get install cmake libgd-dev libhiredis-dev libleveldb-dev libpq-dev libsqlite3-dev zlib1g-dev libzstd-dev"
    exit 1
else
    echo ""
    echo "Alle geprüften Abhängigkeiten sind vorhanden. Das System ist startklar."
    exit 0
fi
