#!/bin/bash
# Ripristino del database PostgreSQL "rapp" da backup

DB_NAME="rapp"
DB_USER="gts"
DB_PASS="gts2016"
DB_HOST="localhost"
DB_PORT="5432"
BACKUP_FILE="$1"

if [ -z "$BACKUP_FILE" ]; then
    echo "Uso: $0 <file_backup.dump>"
    echo ""
    echo "Backup disponibili in ./backups/:"
    ls -1t "$(dirname "$0")/backups/"*.dump 2>/dev/null || echo "  (nessuno)"
    exit 1
fi

if [ ! -f "$BACKUP_FILE" ]; then
    echo "ERRORE: file '$BACKUP_FILE' non trovato." >&2
    exit 1
fi

echo "Ripristino di '$DB_NAME' da '$BACKUP_FILE'..."
echo "ATTENZIONE: il database '$DB_NAME' verrà ricreato. Continuare? [s/N]"
read -r CONFIRM
if [[ "$CONFIRM" != "s" && "$CONFIRM" != "S" ]]; then
    echo "Operazione annullata."
    exit 0
fi

# Termina connessioni attive
PGPASSWORD="$DB_PASS" psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d postgres \
    -c "SELECT pg_terminate_backend(pid) FROM pg_stat_activity WHERE datname = '$DB_NAME' AND pid <> pg_backend_pid();" \
    > /dev/null 2>&1

# Ricrea il database
PGPASSWORD="$DB_PASS" psql -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d postgres \
    -c "DROP DATABASE IF EXISTS $DB_NAME;" \
    -c "CREATE DATABASE $DB_NAME OWNER $DB_USER;"

if [ $? -ne 0 ]; then
    echo "ERRORE: impossibile ricreare il database." >&2
    exit 1
fi

# Ripristina
PGPASSWORD="$DB_PASS" pg_restore -h "$DB_HOST" -p "$DB_PORT" -U "$DB_USER" -d "$DB_NAME" --no-owner --role="$DB_USER" "$BACKUP_FILE"

if [ $? -eq 0 ]; then
    echo "Ripristino completato."
else
    echo "ERRORE: ripristino fallito." >&2
    exit 1
fi
