#!/bin/bash
#
# scripts/backup.sh — backs up the PBX app database and file storage.
#
# Usage: run manually, or via cron:
#   0 3 * * * /var/www/pbx-app/scripts/backup.sh >> /var/log/pbx-backup.log 2>&1
#
# Restores:
#   Database:  mysql -u pbx_app -p pbx_app < backup_YYYY-MM-DD.sql
#   Storage:   tar xzf storage_YYYY-MM-DD.tar.gz -C /var/www/pbx-app/
#
# Configure via the four variables below or by exporting them before calling this script.

set -euo pipefail

APP_DIR="${PBX_APP_DIR:-/var/www/pbx-app}"
BACKUP_DIR="${PBX_BACKUP_DIR:-/var/backups/pbx-app}"
DB_NAME="${PBX_DB_NAME:-pbx_app}"
DB_USER="${PBX_DB_USER:-pbx_app}"
DB_PASS="${PBX_DB_PASS:-}"
RETENTION_DAYS="${PBX_BACKUP_RETENTION_DAYS:-14}"

mkdir -p "$BACKUP_DIR"
TIMESTAMP=$(date +%Y-%m-%d_%H%M%S)

echo "[$(date)] Starting backup..."

# --- Database dump ---
DB_BACKUP_FILE="$BACKUP_DIR/db_${TIMESTAMP}.sql.gz"
if [ -n "$DB_PASS" ]; then
    mysqldump -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" | gzip > "$DB_BACKUP_FILE"
else
    mysqldump -u "$DB_USER" "$DB_NAME" | gzip > "$DB_BACKUP_FILE"
fi
echo "[$(date)] Database backed up to $DB_BACKUP_FILE"

# --- Storage (recordings, voicemail-related files the app itself manages) ---
STORAGE_BACKUP_FILE="$BACKUP_DIR/storage_${TIMESTAMP}.tar.gz"
if [ -d "$APP_DIR/storage" ]; then
    tar czf "$STORAGE_BACKUP_FILE" -C "$APP_DIR" storage
    echo "[$(date)] Storage backed up to $STORAGE_BACKUP_FILE"
else
    echo "[$(date)] WARNING: $APP_DIR/storage not found, skipping storage backup"
fi

# --- Retention: delete backups older than RETENTION_DAYS ---
find "$BACKUP_DIR" -name "db_*.sql.gz" -mtime +"$RETENTION_DAYS" -delete
find "$BACKUP_DIR" -name "storage_*.tar.gz" -mtime +"$RETENTION_DAYS" -delete

echo "[$(date)] Backup complete. Retention: $RETENTION_DAYS days."
