#!/bin/bash
# backup.sh - Backup PostgreSQL database and Redis data
# Run this as user 'press-api' (cron recommended)
# Uses podman exec to interact with containerized services

set -e

# Configuration
BACKUP_DIR="$HOME/press-zone-backend/backup"
RETENTION_DAYS=30  # Keep backups for 30 days
TIMESTAMP=$(date +%Y%m%d_%H%M%S)

# Database credentials (from .env)
DB_USER="translate_user"
DB_NAME="translate_db"

# Create backup directory
mkdir -p "$BACKUP_DIR"

echo "Starting backup at $(date)"

# Backup PostgreSQL (via containerized pg_dump)
echo "Backing up PostgreSQL database..."
podman exec tpz-postgres pg_dump -U "$DB_USER" -d "$DB_NAME" -F c > "$BACKUP_DIR/postgres_${TIMESTAMP}.dump" || {
    echo "ERROR: PostgreSQL backup failed"
    exit 1
}

# Backup Redis (trigger save, then copy RDB file out of container)
echo "Backing up Redis data..."
podman exec tpz-redis redis-cli SAVE
podman cp tpz-redis:/data/dump.rdb "$BACKUP_DIR/redis_${TIMESTAMP}.rdb" 2>/dev/null || {
    echo "WARNING: Redis backup failed (dump.rdb may not exist yet)"
}

# Compress backups
echo "Compressing backups..."
gzip "$BACKUP_DIR/postgres_${TIMESTAMP}.dump"
[ -f "$BACKUP_DIR/redis_${TIMESTAMP}.rdb" ] && gzip "$BACKUP_DIR/redis_${TIMESTAMP}.rdb"

# Calculate sizes
PG_SIZE=$(du -h "$BACKUP_DIR/postgres_${TIMESTAMP}.dump.gz" | cut -f1)
echo "PostgreSQL backup size: $PG_SIZE"

# Remove old backups
echo "Removing backups older than $RETENTION_DAYS days..."
find "$BACKUP_DIR" -name "postgres_*.dump.gz" -mtime +$RETENTION_DAYS -delete
find "$BACKUP_DIR" -name "redis_*.rdb.gz" -mtime +$RETENTION_DAYS -delete

# List recent backups
echo ""
echo "Recent backups:"
ls -lh "$BACKUP_DIR" | tail -10

echo "Backup completed successfully at $(date)"
