#!/bin/bash
# 실습 #7 ④ — 차등 백업 (지난 풀백업 이후 변경분만)
# 패턴: 주간 풀 + 일간 차등 — 복원 시 풀 + 마지막 차등 2개만 필요
set -e

SRC="${1:-/tmp/lab07_data}"      # 기본: 샘플 데이터 (setup_00_make_sample.sh init 필요)
DST=/backup/diff
DATE=$(date +%Y%m%d_%H%M)
DOW=$(date +%u)               # 1(월)~7(일)

sudo mkdir -p "$DST"

# 1) 일요일(7) 이면 풀백업
if [ "$DOW" = "7" ] || [ "$(sudo ls $DST/full_*.tar.gz 2>/dev/null | wc -l)" = "0" ]; then
    ARCHIVE="$DST/full_${DATE}.tar.gz"
    sudo tar czf "$ARCHIVE" -C "$(dirname $SRC)" "$(basename $SRC)"
    sudo sh -c "cd $DST && sha256sum $(basename $ARCHIVE) > $(basename $ARCHIVE).sha256"
    echo "✓ 풀백업: $ARCHIVE ($(du -sh "$ARCHIVE" | cut -f1))"
    exit 0
fi

# 2) 평일이면 차등 (지난 풀백업 이후 변경)
LAST_FULL=$(sudo ls -1t $DST/full_*.tar.gz 2>/dev/null | head -1)
if [ -z "$LAST_FULL" ]; then
    echo "❌ 지난 풀백업 없음. 먼저 일요일에 풀백업 실행 필요"
    exit 1
fi
LAST_FULL_TIME=$(sudo stat -c '%Y' "$LAST_FULL")
LAST_FULL_DATE=$(date -d @$LAST_FULL_TIME '+%Y-%m-%d %H:%M:%S')
echo "→ 지난 풀백업: $LAST_FULL_DATE ($(basename $LAST_FULL))"

ARCHIVE="$DST/diff_${DATE}.tar.gz"
sudo tar czf "$ARCHIVE" --newer="$LAST_FULL_DATE" -C "$(dirname $SRC)" "$(basename $SRC)" 2>/dev/null || true
sudo sh -c "cd $DST && sha256sum $(basename $ARCHIVE) > $(basename $ARCHIVE).sha256"

echo "✓ 차등: $ARCHIVE ($(du -sh "$ARCHIVE" | cut -f1))"

# 3) 보관 정책 — 30일 이전 차등 삭제, 4주 이전 풀백업 삭제
sudo find $DST -name 'diff_*'  -mtime +30 -delete
sudo find $DST -name 'full_*'  -mtime +28 -delete

# 4) 보관 현황
echo
echo "=== 현재 보관 ==="
sudo ls -lh $DST | tail -15
echo
echo "=== 복원 시나리오 ==="
echo "  # 1) 풀 백업 복원"
echo "  sudo tar xzf $LAST_FULL -C /restore/"
echo "  # 2) 가장 최근 차등을 풀 위에 덮어쓰기"
echo "  sudo tar xzf $(sudo ls -1t $DST/diff_*.tar.gz 2>/dev/null | head -1) -C /restore/"
