#!/bin/bash
# Accounting DB backup — daily pg_dump with rotation
# Stores on /dev/sda (root disk), separate from DB on /dev/sdb
# Retention: 7 daily + 4 weekly (Sunday)

BACKUP_DIR="/root/backups"
DB_CONTAINER="accounting-accounting-db-1"
DB_NAME="windyview_accounting"
DB_USER="accounting"
DATE=$(date +%Y-%m-%d)
DOW=$(date +%u)  # 1=Monday, 7=Sunday
LOG="/var/log/backup-accounting.log"

log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "$LOG"; }

# Daily backup
DAILY_FILE="${BACKUP_DIR}/accounting-daily-${DATE}.sql.gz"
if docker exec "$DB_CONTAINER" pg_dump -U "$DB_USER" "$DB_NAME" | gzip > "$DAILY_FILE"; then
    SIZE=$(du -h "$DAILY_FILE" | cut -f1)
    log "OK: daily backup ${SIZE} -> ${DAILY_FILE}"
else
    log "FAIL: daily backup failed"
    exit 1
fi

# Weekly backup (Sunday)
if [ "$DOW" -eq 7 ]; then
    WEEKLY_FILE="${BACKUP_DIR}/accounting-weekly-${DATE}.sql.gz"
    cp "$DAILY_FILE" "$WEEKLY_FILE"
    log "OK: weekly backup -> ${WEEKLY_FILE}"
fi

# Rotate: keep 7 daily
for f in $(ls -t "${BACKUP_DIR}"/accounting-daily-*.sql.gz 2>/dev/null | tail -n +8); do
    rm -f "$f"
    log "ROTATED: removed old daily $f"
done

# Rotate: keep 4 weekly
for f in $(ls -t "${BACKUP_DIR}"/accounting-weekly-*.sql.gz 2>/dev/null | tail -n +5); do
    rm -f "$f"
    log "ROTATED: removed old weekly $f"
done

# Copy latest to dev server (off-server backup)
scp -q "$DAILY_FILE" root@204.168.159.197:/root/backups/accounting-latest.sql.gz 2>/dev/null && \
    log "OK: copied to dev server" || \
    log "WARN: failed to copy to dev server (non-fatal)"
