#!/bin/bash
# ============================================================================
# Healthcheck für Palworld Docker Container
# ============================================================================

# Prüfe ob PalServer-Prozess läuft
if ! pgrep -f "PalServer.exe" > /dev/null 2>&1; then
    echo "ERROR: PalServer.exe läuft nicht"
    exit 1
fi

# Prüfe ob Ports erreichbar sind
# RCON Port prüfen (wenn aktiviert)
if [ "${RCON_ENABLED}" = "true" ] && [ -n "${RCON_PORT}" ]; then
    if ! nc -z localhost ${RCON_PORT} 2>/dev/null; then
        echo "WARN: RCON Port ${RCON_PORT} nicht erreichbar"
        # Nicht kritisch, nur Warnung
    fi
fi

# Game Port prüfen
if [ -n "${SERVER_PORT}" ]; then
    # UDP-Port kann mit nc nicht direkt geprüft werden
    # Stattdessen prüfen ob Socket existiert oder Prozess Port nutzt
    if ! netstat -ulnp 2>/dev/null | grep -q ":${SERVER_PORT}"; then
        # Alternative: ss statt netstat
        if command -v ss >/dev/null 2>&1; then
            if ! ss -ulnp | grep -q "PalServer"; then
                echo "WARN: Game Port scheint nicht gebunden"
            fi
        fi
    fi
fi

# Prüfe Log-Datei auf Fehler (letzte 60 Sekunden)
LOG_FILE="${SERVER_DIR}/Pal/Saved/Logs/Pal.log"
if [ -f "${LOG_FILE}" ]; then
    # Suche nach kritischen Fehlern in letzten 5 Minuten
    if find "${LOG_FILE}" -mmin -5 2>/dev/null | grep -q .; then
        if tail -50 "${LOG_FILE}" 2>/dev/null | grep -q "Fatal error"; then
            echo "ERROR: Fatal error im Log gefunden"
            exit 1
        fi
    fi
fi

# Speicher-Prüfung
MEM_USAGE=$(free | grep Mem | awk '{printf "%.0f", $3/$2 * 100}')
if [ "$MEM_USAGE" -gt 95 ]; then
    echo "WARN: Speicherauslastung kritisch: ${MEM_USAGE}%"
fi

echo "OK: Server läuft"
exit 0
