#!/bin/bash
# 실습 #7 ⑥ — 디렉토리 → 압축 → 원격 전송 → 무결성 검증 → 풀기 (전체 플로우)
# 사용: bash setup_06_remote_verify.sh <SRC> <USER@HOST:DEST_DIR>
# 예시: bash setup_06_remote_verify.sh /var/www lab@192.168.56.20:/backup/
set -e

SRC="${1:-/var/www}"
REMOTE="${2:-lab@192.168.56.20:/backup/}"
DATE=$(date +%Y%m%d_%H%M)
TMP_TGZ="/tmp/$(basename "$SRC")_${DATE}.tar.gz"

# 1) 로컬 압축 + 체크섬
echo "=== 1) 로컬 압축 + sha256 ==="
sudo tar czf "$TMP_TGZ" -C "$(dirname $SRC)" "$(basename $SRC)"
sha256sum "$TMP_TGZ" > "$TMP_TGZ.sha256"
echo "✓ $TMP_TGZ  ($(du -sh "$TMP_TGZ" | cut -f1))"
cat "$TMP_TGZ.sha256"

# 2) 원격 전송 — dry-run 먼저
echo
echo "=== 2) 원격 dry-run (확인) ==="
rsync -avzn "$TMP_TGZ" "$TMP_TGZ.sha256" "$REMOTE"
read -p "→ 실제 전송하려면 Enter, 취소 Ctrl+C... "

echo
echo "=== 3) 실제 전송 ==="
rsync -avz --progress "$TMP_TGZ" "$TMP_TGZ.sha256" "$REMOTE"

# 4) 원격에서 무결성 검증 (SSH 실행)
RHOST="${REMOTE%:*}"
RPATH="${REMOTE#*:}"
echo
echo "=== 4) 원격 sha256 검증 ==="
ssh "$RHOST" "cd '$RPATH' && sha256sum -c '$(basename $TMP_TGZ).sha256'"

# 5) 원격에서 풀기 (옵션)
echo
read -p "원격에서 자동 풀기 (/restore/$(basename $SRC)_$DATE) 하시겠습니까? [y/N] " yn
if [ "$yn" = "y" ] || [ "$yn" = "Y" ]; then
    ssh "$RHOST" "sudo mkdir -p /restore && \
                  sudo tar xzf '$RPATH$(basename $TMP_TGZ)' -C /restore/ && \
                  ls -l /restore/ | head -5"
fi

# 6) 로컬 임시 파일 정리
rm -f "$TMP_TGZ" "$TMP_TGZ.sha256"
echo
echo "→ 완료. 원격 백업 보관: $REMOTE"
