#!/usr/bin/env bash
# site/backup -- snapshot one site: database dump plus the document root
set -o pipefail
SELF=$(readlink -f "${BASH_SOURCE[0]}")
NV_BASE=$(cd "$(dirname "$SELF")/../../.." && pwd)
export NV_BASE
# shellcheck source=/dev/null
. "$NV_BASE/lib/core/bootstrap.sh"

nv_require_root || exit 1
ui_header "$(t site_m_backup)"

site_pick_domain "${1:-}" || exit $?
domain=$SITE_DOMAIN

ui_kv "$(t col_domain)" "$domain"
ui_kv "$(t site_root)"  "$(nv_site_get "$domain" root_path -)"
ui_kv "$(t site_db)"    "$(nv_site_get "$domain" db_name -)"
ui_blank
ui_step "$(t site_backup_running)"

nv_lock_acquire "site:$domain" 10 || { nv_fail 6199 "$(t lock_busy "$domain")"; exit 1; }
dir=$(site_snapshot "$domain" "site-$domain")
rc=$?
nv_lock_release "site:$domain"

[ "$rc" -eq 0 ] && [ -n "$dir" ] || { nv_fail 4501 "$(t site_backup_failed)"; exit 1; }

ui_ok "$(t site_backup_done)"
ui_kv "$(t backup_location)" "$dir"
for f in "$dir"/*; do
    [ -f "$f" ] && ui_kv "$(basename "$f")" "$(du -h "$f" | cut -f1)"
done
ui_kv "$(t backup_total)" "$(du -sh "$dir" | cut -f1)"
ui_blank
exit 0
