#!/bin/bash
# 실습 #7 ⓪ — 백업 실습용 샘플 데이터 생성 + 시간 진행 시뮬레이션
# Day 1 (init) → Day 2 → Day 3 단계마다 파일이 추가/수정/삭제 되어
# 증분 백업의 hardlink 절약, 차등 백업의 변경분만 모이는 효과를 눈으로 확인 가능.
#
# 사용:
#   bash setup_00_make_sample.sh init     # Day 1: 초기 데이터 100여개
#   bash setup_00_make_sample.sh day2     # Day 2: 일부 수정 + 새 파일 추가
#   bash setup_00_make_sample.sh day3     # Day 3: 추가 수정 + 일부 삭제
#   bash setup_00_make_sample.sh status   # 현재 상태 요약
#   bash setup_00_make_sample.sh clean    # 샘플 데이터 + 백업 전체 정리

set -e

DATA=/tmp/lab07_data
ACTION="${1:-status}"

case "$ACTION" in
init)
    rm -rf "$DATA"
    mkdir -p "$DATA"/{docs,configs,logs,uploads}
    # 문서 30개 (텍스트)
    for i in $(seq 1 30); do
        echo "보고서 #$i — $(date) — 본문 lorem ipsum dolor sit amet" > "$DATA/docs/report_$(printf %03d $i).txt"
    done
    # 설정 파일 10개
    for n in nginx apache mysql redis postgres app web api lb cache; do
        echo "[${n}]" > "$DATA/configs/$n.conf"
        echo "port = 80" >> "$DATA/configs/$n.conf"
        echo "workers = 4" >> "$DATA/configs/$n.conf"
    done
    # 로그 20개 (각 100줄)
    for i in $(seq 1 20); do
        seq 1 100 | awk -v d="$i" '{print "[2026-06-0" d "] line " $1 " — request log"}' > "$DATA/logs/access_$(printf %02d $i).log"
    done
    # 업로드 (작은 바이너리 30개)
    for i in $(seq 1 30); do
        dd if=/dev/urandom of="$DATA/uploads/file_$(printf %03d $i).bin" bs=1K count=$((RANDOM % 50 + 10)) 2>/dev/null
    done
    # 큰 파일 1개
    dd if=/dev/urandom of="$DATA/database.dat" bs=1M count=5 2>/dev/null

    TOTAL=$(find "$DATA" -type f | wc -l)
    SIZE=$(du -sh "$DATA" | cut -f1)
    echo "✓ Day 1 init — 파일 $TOTAL 개, 총 $SIZE — $DATA"
    ;;

day2)
    if [ ! -d "$DATA" ]; then echo "❌ init 먼저 실행"; exit 1; fi
    # 1) 일부 문서 수정 (5개)
    for i in 3 7 12 18 25; do
        echo "[Day 2 수정 $(date)]" >> "$DATA/docs/report_$(printf %03d $i).txt"
    done
    # 2) 새 문서 5개 추가
    for i in 31 32 33 34 35; do
        echo "신규 보고서 #$i — Day 2 추가" > "$DATA/docs/report_$(printf %03d $i).txt"
    done
    # 3) 새 설정 파일 1개
    echo "[monitoring]" > "$DATA/configs/monitoring.conf"
    # 4) 새 로그 추가 (3개)
    for i in 21 22 23; do
        seq 1 100 | awk -v d="$i" '{print "[2026-06-" d "] new log " $1}' > "$DATA/logs/access_$(printf %02d $i).log"
    done
    # 5) 일부 업로드 삭제 (3개)
    rm -f "$DATA/uploads/file_005.bin" "$DATA/uploads/file_015.bin" "$DATA/uploads/file_025.bin"

    TOTAL=$(find "$DATA" -type f | wc -l)
    SIZE=$(du -sh "$DATA" | cut -f1)
    echo "✓ Day 2 — 수정 5 / 추가 9 / 삭제 3. 총 파일 $TOTAL ($SIZE)"
    ;;

day3)
    if [ ! -d "$DATA" ]; then echo "❌ init 먼저 실행"; exit 1; fi
    # 1) database.dat 변경 (전체 재생성)
    dd if=/dev/urandom of="$DATA/database.dat" bs=1M count=5 2>/dev/null
    # 2) 새 디렉토리 + 파일
    mkdir -p "$DATA/exports"
    for i in 1 2 3; do
        dd if=/dev/urandom of="$DATA/exports/export_$(printf %02d $i).bin" bs=1K count=200 2>/dev/null
    done
    # 3) 설정 파일 일부 수정
    echo "tls = on" >> "$DATA/configs/nginx.conf"
    echo "tls = on" >> "$DATA/configs/apache.conf"
    # 4) 모든 로그 1줄씩 추가 (대량 변경)
    for f in "$DATA"/logs/*.log; do
        echo "[Day 3 rotation] file rolled" >> "$f"
    done

    TOTAL=$(find "$DATA" -type f | wc -l)
    SIZE=$(du -sh "$DATA" | cut -f1)
    echo "✓ Day 3 — DB 재생성 / exports/ 추가 / 설정 2 수정 / 로그 전부 수정. 총 $TOTAL ($SIZE)"
    ;;

status)
    if [ ! -d "$DATA" ]; then
        echo "초기 상태 — init 으로 시작:"
        echo "  bash $(basename $0) init"
        exit 0
    fi
    echo "=== $DATA ==="
    find "$DATA" -maxdepth 1 -mindepth 1 -type d -printf '  %f/ — ' -exec sh -c 'find "$1" -type f | wc -l | tr -d "\n" && echo " files"' _ {} \;
    echo "  database.dat: $([ -f $DATA/database.dat ] && du -h $DATA/database.dat | cut -f1 || echo 'X')"
    echo "  ----"
    echo "  총 파일: $(find $DATA -type f | wc -l)"
    echo "  총 크기: $(du -sh $DATA | cut -f1)"
    [ -d /backup/snapshots ] && echo "  스냅샷: $(ls /backup/snapshots 2>/dev/null | wc -l)개"
    [ -d /backup/full ] && echo "  풀백업: $(ls /backup/full 2>/dev/null | wc -l)개"
    [ -d /backup/diff ] && echo "  차등: $(ls /backup/diff 2>/dev/null | wc -l)개"
    ;;

clean)
    sudo rm -rf "$DATA" /backup/snapshots /backup/full /backup/diff 2>/dev/null
    echo "✓ 정리 완료"
    ;;

*)
    echo "사용법: bash $(basename $0) {init|day2|day3|status|clean}"
    exit 1
    ;;
esac
