#!/bin/bash

# EzyGas Paperclip Backup Script
# Runs daily to backup Postgres and config files

set -e

BACKUP_DIR="/backups"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
DB_NAME="ezygas"
DB_USER="paperclip"
DB_HOST="postgres"
DB_PORT="5432"
RETENTION_DAYS=30

# Create backup directory if it doesn't exist
mkdir -p "$BACKUP_DIR"

echo "[$(date +'%Y-%m-%d %H:%M:%S')] Starting backup..."

# Backup PostgreSQL
echo "[$(date +'%Y-%m-%d %H:%M:%S')] Backing up PostgreSQL database..."
pg_dump \
  -h "$DB_HOST" \
  -p "$DB_PORT" \
  -U "$DB_USER" \
  -d "$DB_NAME" \
  --no-password \
  > "$BACKUP_DIR/ezygas_postgres_${TIMESTAMP}.sql"

# Compress the backup
gzip "$BACKUP_DIR/ezygas_postgres_${TIMESTAMP}.sql"
echo "[$(date +'%Y-%m-%d %H:%M:%S')] PostgreSQL backup completed: ezygas_postgres_${TIMESTAMP}.sql.gz"

# Backup Paperclip config
if [ -d "/app/config" ]; then
  echo "[$(date +'%Y-%m-%d %H:%M:%S')] Backing up Paperclip configuration..."
  tar -czf "$BACKUP_DIR/ezygas_config_${TIMESTAMP}.tar.gz" -C /app config/
  echo "[$(date +'%Y-%m-%d %H:%M:%S')] Configuration backup completed: ezygas_config_${TIMESTAMP}.tar.gz"
fi

# Clean up old backups (retention policy)
echo "[$(date +'%Y-%m-%d %H:%M:%S')] Cleaning up backups older than ${RETENTION_DAYS} days..."
find "$BACKUP_DIR" -name "ezygas_*.sql.gz" -type f -mtime +$RETENTION_DAYS -delete
find "$BACKUP_DIR" -name "ezygas_*.tar.gz" -type f -mtime +$RETENTION_DAYS -delete

# List recent backups
echo "[$(date +'%Y-%m-%d %H:%M:%S')] Recent backups:"
ls -lh "$BACKUP_DIR"/ezygas_* 2>/dev/null | tail -5

echo "[$(date +'%Y-%m-%d %H:%M:%S')] Backup completed successfully."
