#!/usr/bin/env bash
# site/export -- one archive per site, ready to move to another server
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_export)"

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

out="/root/nhanhvps-site-$domain-$(date -u '+%Y%m%dT%H%M%SZ').tar.gz"
ui_step "$(t site_export_running)"

work=$(mktemp -d)
trap 'rm -rf "$work"' EXIT
snap=$(site_snapshot "$domain" "export-$domain")
[ -n "$snap" ] || { nv_fail 4504 "$(t site_export_failed)"; exit 1; }

cp -a "$snap"/* "$work"/ 2>/dev/null || true
# the registry record documents how the site was configured
cp -a "$NV_STATE_DIR/sites/$domain.conf" "$work/site.conf" 2>/dev/null || true
cat >"$work/README.txt" <<EOF
$(t site_export_readme)
domain: $domain
created: $(date -u '+%Y-%m-%dT%H:%M:%SZ')
files:  $(basename "$(ls "$work"/*files.tar.gz 2>/dev/null | head -n 1)")
db:     $(basename "$(ls "$work"/*.sql.gz 2>/dev/null | head -n 1)")
EOF

if tar czf "$out" -C "$work" . 2>/dev/null; then
    chmod 0600 "$out"
    nv_trace site-export "$domain -> $out"
    ui_ok "$(t site_export_done "$out")"
    ui_kv "$(t col_size)" "$(du -h "$out" | cut -f1)"
    ui_info "$(t backup_export_hint)"
else
    rm -f "$out"
    nv_fail 4504 "$(t site_export_failed)"
    exit 1
fi
exit 0
