#!/bin/bash
set -e

echo "🧯 Hördle restore script – Rollback auf früheres Datenbank-Backup"

# Hilfsfunktion für Fehlerausgabe
die() {
    echo "❌ $1" >&2
    exit 1
}

# Backup-Verzeichnis
BACKUP_DIR="./backups"

if [ ! -d "$BACKUP_DIR" ]; then
    die "Kein Backup-Verzeichnis gefunden (${BACKUP_DIR}). Es scheint noch kein Deployment-Backup erstellt worden zu sein."
fi

# Argument: gewünschter Backup-Timestamp oder 'latest'
TARGET="$1"

if [ -z "$TARGET" ]; then
    echo "⚙️  Nutzung:"
    echo "  ./scripts/restore.sh latest           # neuestes Backup zurückspielen"
    echo "  ./scripts/restore.sh 20250101_120000  # bestimmtes Backup (Timestamp aus Dateiname)"
    echo ""
    echo "Verfügbare Backups:"
    ls -1 "${BACKUP_DIR}"/*.db 2>/dev/null || echo "  (keine .db-Backups gefunden)"
    exit 1
fi

# DB-Pfad wie in deploy.sh bestimmen
DB_PATH=""

if [ -f "docker-compose.yml" ]; then
    DB_PATH=$(grep -oP 'DATABASE_URL=file:\K[^\s]+' docker-compose.yml | head -1)
fi

if [ -z "$DB_PATH" ] && [ -f ".env" ]; then
    DB_PATH=$(grep -oP '^DATABASE_URL=file:\K.+' .env | head -1)
fi

DB_PATH=$(echo "$DB_PATH" | tr -d '"' | tr -d "'")

if [ -z "$DB_PATH" ]; then
    die "Konnte den Datenbank-Pfad aus docker-compose.yml oder .env nicht ermitteln."
fi

# Containerpfad zu Hostpfad umbauen (/app/... -> ./...)
DB_PATH=$(echo "$DB_PATH" | sed 's|/app/|./|')

echo "📁 Ziel-Datenbank-Datei: $DB_PATH"

# Backup-Datei bestimmen
if [ "$TARGET" = "latest" ]; then
    BACKUP_FILE=$(ls -t "${BACKUP_DIR}"/*.db 2>/dev/null | head -1 || true)
    [ -z "$BACKUP_FILE" ] && die "Kein Backup gefunden."
else
    # Versuchen, exakten Dateinamen zu finden
    if [ -f "${BACKUP_DIR}/${TARGET}" ]; then
        BACKUP_FILE="${BACKUP_DIR}/${TARGET}"
    else
        # Versuchen, anhand des Timestamps ein Backup zu finden
        BACKUP_FILE=$(ls "${BACKUP_DIR}"/*"${TARGET}"*.db 2>/dev/null | head -1 || true)
    fi

    [ -z "$BACKUP_FILE" ] && die "Kein Backup für '${TARGET}' gefunden."
fi

echo "⏪ Verwende Backup-Datei: $BACKUP_FILE"

if [ ! -f "$BACKUP_FILE" ]; then
    die "Backup-Datei existiert nicht: $BACKUP_FILE"
fi

read -p "❗ Dies überschreibt die aktuelle Datenbank-Datei. Fortfahren? [y/N] " CONFIRM
if [[ ! "$CONFIRM" =~ ^[Yy]$ ]]; then
    echo "Abgebrochen."
    exit 0
fi

echo "📦 Kopiere Backup nach: $DB_PATH"
cp "$BACKUP_FILE" "$DB_PATH"

echo "🔄 Starte Docker-Container neu..."
docker compose restart hoerdle

echo "✅ Restore abgeschlossen."
echo "ℹ️  Hinweis: Der Code-Stand (Git-Commit) ist nicht automatisch zurückgedreht."
echo "    Falls du auch die App-Version zurückrollen möchtest, checke lokal den passenden Commit/Tag aus"
echo "    und führe anschließend wieder ./scripts/deploy.sh aus."


