#!/bin/bash
# Backup script for PostgreSQL database
# Usage: ./scripts/backup-postgres.sh
# Add to crontab: 0 3 * * * /root/chatapp/scripts/backup-postgres.sh

set -euo pipefail

# Configuration
BACKUP_DIR="/root/chatapp/backups"
DATE=$(date +%Y%m%d_%H%M%S)
BACKUP_FILE="chatapp_pg_backup_${DATE}.sql.gz"
RETENTION_DAYS=30
DB_NAME="chatapp"
DB_USER="chatapp"
DB_HOST="localhost"
DB_PORT="5432"

# Create backup directory
mkdir -p "${BACKUP_DIR}"

echo "📦 Starting PostgreSQL backup..."

# Create compressed dump
PGPASSWORD=chatapp_dev_password_2024 pg_dump \
  -h "${DB_HOST}" \
  -p "${DB_PORT}" \
  -U "${DB_USER}" \
  -d "${DB_NAME}" \
  --format=plain \
  --no-owner \
  --no-privileges \
  | gzip > "${BACKUP_DIR}/${BACKUP_FILE}"

# Get file size
FILE_SIZE=$(du -h "${BACKUP_DIR}/${BACKUP_FILE}" | cut -f1)
echo "✅ Backup created: ${BACKUP_FILE} (${FILE_SIZE})"

# Clean old backups
echo "🧹 Cleaning backups older than ${RETENTION_DAYS} days..."
find "${BACKUP_DIR}" -name "chatapp_pg_backup_*.sql.gz" -type f -mtime +${RETENTION_DAYS} -delete

# List remaining backups
BACKUP_COUNT=$(find "${BACKUP_DIR}" -name "chatapp_pg_backup_*.sql.gz" -type f | wc -l)
echo "📊 Total backups: ${BACKUP_COUNT}"

echo "✅ Backup completed successfully"