#!/bin/sh
# GerbilManager Wiederherstellung (Container-Welt)
# Aufruf: docker compose -f deploy/truenas/compose.yaml exec backup /bin/sh /scripts/restore.sh
# Optional: .../restore.sh 2026-06-06_03-00   (bestimmtes Backup)
#
# WARNUNG: Ueberschreibt alle aktuellen Datenbankdaten und Fotos!
set -e

HOST="${POSTGRES_HOST:-db}"
USER="${POSTGRES_USER:-postgres}"
DB="${POSTGRES_DB:-gerbilmanager}"
BACKUP_ROOT=/backups

log() { echo "[$(date +'%H:%M:%S')] $1"; }

# --- Backup-Verzeichnis bestimmen ---
if [ -n "$1" ]; then
    BACKUP_DIR="$BACKUP_ROOT/$1"
else
    BACKUP_DIR=$(find "$BACKUP_ROOT" -maxdepth 1 -type d -name '????-??-??_??-??' \
        | sort -r | head -1)
fi

if [ -z "$BACKUP_DIR" ] || [ ! -d "$BACKUP_DIR" ]; then
    log "FEHLER: Backup-Verzeichnis nicht gefunden: ${BACKUP_DIR:-$BACKUP_ROOT}"
    log "Verfuegbare Backups:"
    find "$BACKUP_ROOT" -maxdepth 1 -type d -name '????-??-??_??-??' | sort -r
    exit 1
fi

SQL_FILE=$(find "$BACKUP_DIR" -name '*.sql' | head -1)
PHOTO_ARCHIVE=$(find "$BACKUP_DIR" -name '*.tar.gz' | head -1)

if [ -z "$SQL_FILE" ]; then
    log "FEHLER: Kein SQL-Dump in $BACKUP_DIR gefunden."
    exit 1
fi

log "Wiederherstellung aus: $BACKUP_DIR"
log "  Datenbank : $(basename $SQL_FILE)"
[ -n "$PHOTO_ARCHIVE" ] && log "  Fotos     : $(basename $PHOTO_ARCHIVE)"

# --- Bestaetigung (interaktiv; mit -f ueberspringen) ---
if [ "$1" != "-f" ] && [ "$2" != "-f" ]; then
    printf "WARNUNG: Aktuelle Daten werden unwiderruflich ueberschrieben!\nFortfahren? (ja/nein): "
    read -r CONFIRM
    if [ "$CONFIRM" != "ja" ]; then
        log "Abgebrochen."
        exit 0
    fi
fi

# --- Datenbankwiederherstellung ---
log "Trenne laufende DB-Verbindungen..."
psql -h "$HOST" -U "$USER" -d postgres -c \
    "SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname='$DB' AND pid<>pg_backend_pid();" \
    > /dev/null 2>&1 || true

log "Spiele SQL-Dump ein..."
if ! psql -h "$HOST" -U "$USER" -d "$DB" < "$SQL_FILE" > /tmp/restore_out 2>&1; then
    log "FEHLER bei der DB-Wiederherstellung:"
    cat /tmp/restore_out
    exit 1
fi
log "Datenbankwiederherstellung erfolgreich."

# --- Fotos wiederherstellen ---
if [ -n "$PHOTO_ARCHIVE" ]; then
    log "Stelle Fotos wieder her..."
    rm -rf /data/photos/* 2>/dev/null || true
    tar xzf "$PHOTO_ARCHIVE" -C /data
    PHOTO_COUNT=$(find /data/photos -type f 2>/dev/null | wc -l)
    log "Fotos wiederhergestellt: $PHOTO_COUNT Dateien."
fi

log "Wiederherstellung abgeschlossen."
log "Starte API-Container neu: docker compose ... restart api"
