#!/usr/bin/env bash
# pre-compact-backup.sh: PostToolUse 훅
# Compact 도구 호출 감지 시 세션 컨텍스트를 백업한다.
# 백업 경로: memory/backups/pre-compact-{timestamp}.json
# 최근 5건만 유지.
#
# 참고: claudefa.st Context Recovery Hook 패턴 참조

# 실패해도 절대 훅을 차단하지 않음
trap 'exit 0' ERR
set +e

# stdin에서 JSON 읽기 (PostToolUse 훅 입력)
INPUT=$(cat)

# tool_name 추출
if command -v jq &>/dev/null; then
  TOOL_NAME=$(echo "$INPUT" | jq -r '.tool_name // ""' 2>/dev/null) || TOOL_NAME=""
else
  TOOL_NAME=$(echo "$INPUT" | grep -o '"tool_name":"[^"]*"' | head -1 | cut -d'"' -f4) || TOOL_NAME=""
fi

# Compact 관련 도구가 아니면 종료
case "$TOOL_NAME" in
  *[Cc]ompact*) ;;
  *) exit 0 ;;
esac

# 백업 디렉토리 설정
BACKUP_DIR="/home/jay/workspace/memory/backups"
mkdir -p "$BACKUP_DIR" 2>/dev/null || exit 0

# 타임스탬프
TIMESTAMP=$(date +"%Y%m%dT%H%M%S")

# 백업 파일 생성 — 훅 입력(현재 컨텍스트 정보)을 저장
BACKUP_FILE="${BACKUP_DIR}/pre-compact-${TIMESTAMP}.json"

# 봇 식별 (cwd 기반)
if command -v jq &>/dev/null; then
  CWD=$(echo "$INPUT" | jq -r '.cwd // "unknown"' 2>/dev/null) || CWD="unknown"
else
  CWD=$(echo "$INPUT" | grep -o '"cwd":"[^"]*"' | head -1 | cut -d'"' -f4) || CWD="unknown"
fi

# 백업 JSON 생성
if command -v jq &>/dev/null; then
  jq -n \
    --arg ts "$TIMESTAMP" \
    --arg cwd "$CWD" \
    --arg tool "$TOOL_NAME" \
    --argjson input "$INPUT" \
    '{
      backup_timestamp: $ts,
      cwd: $cwd,
      tool_name: $tool,
      hook_input: $input
    }' > "$BACKUP_FILE" 2>/dev/null || echo "$INPUT" > "$BACKUP_FILE" 2>/dev/null
else
  echo "$INPUT" > "$BACKUP_FILE" 2>/dev/null
fi

# 오래된 백업 삭제 (최근 5건만 유지)
# pre-compact-*.json 파일을 시간순 정렬 후 5개 초과분 삭제
BACKUP_COUNT=$(ls -1 "$BACKUP_DIR"/pre-compact-*.json 2>/dev/null | wc -l)
if [[ "$BACKUP_COUNT" -gt 5 ]]; then
  DELETE_COUNT=$((BACKUP_COUNT - 5))
  ls -1t "$BACKUP_DIR"/pre-compact-*.json 2>/dev/null | tail -n "$DELETE_COUNT" | xargs rm -f 2>/dev/null
fi

# stderr로 로그 출력 (디버깅용)
echo "pre-compact backup saved: ${BACKUP_FILE}" >&2

exit 0
