#!/bin/bash
################################################################################
# NVR Backup Script
#
# Triggers a backup of the NVR system via the backend container.
# The backup is stored on the VideoStore partition so it survives OS reinstall.
#
# Usage:
#   sudo ./backup-nvr.sh
#
# URL: http://files.dividia.net/software/nvr-docker/backup-nvr.sh
################################################################################

set -e

INSTALL_DIR="/opt/dividia"

RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'

log_info()  { echo -e "${GREEN}[INFO]${NC} $1"; }
log_warn()  { echo -e "${YELLOW}[WARN]${NC} $1"; }
log_error() { echo -e "${RED}[ERROR]${NC} $1"; }

cd "$INSTALL_DIR"

# 1. Verify NVR stack is running
if ! docker compose ps --format '{{.Service}}' 2>/dev/null | grep -q backend; then
    log_error "NVR backend container is not running"
    log_error "Start the stack first: cd $INSTALL_DIR && docker compose up -d"
    exit 1
fi

# 2. Check backend is healthy
HEALTH=$(docker compose ps backend --format '{{.Health}}' 2>/dev/null)
if [[ "$HEALTH" != "healthy" ]] && [[ "$HEALTH" != "" ]]; then
    log_warn "Backend container health: $HEALTH (proceeding anyway)"
fi

log_info "Starting NVR backup..."

# 3. Run backup inside the backend container
docker compose exec backend rda-db --backup
RESULT=$?

if [[ $RESULT -ne 0 ]]; then
    log_error "Backup failed (exit code: $RESULT)"
    exit 1
fi

# 4. Find the latest backup directory
BACKUP_DIR=$(docker compose exec -T backend sh -c 'ls -dt /videostore/vs1/backups/[0-9]* 2>/dev/null | head -1')
if [[ -z "$BACKUP_DIR" ]]; then
    log_warn "Could not determine backup directory path"
else
    log_info "Backup saved to: $BACKUP_DIR"
fi

# 5. Belt-and-suspenders: save .env to VideoStore as well
if [[ -f "$INSTALL_DIR/.env" ]]; then
    VS_MOUNT=$(findmnt -rn -o TARGET -S LABEL=vs1 2>/dev/null || true)
    if [[ -n "$VS_MOUNT" ]]; then
        mkdir -p "$VS_MOUNT/backups"
        cp "$INSTALL_DIR/.env" "$VS_MOUNT/backups/.env.save"
        log_info "Saved .env to $VS_MOUNT/backups/.env.save"
    fi
fi

echo ""
log_info "Backup complete!"
echo ""
