#!/bin/bash
# SessionStart hook + 수동 실행 (인자 `report` | `session_restore_report` | `auditor_window <name>`)
# C35-10 장기 행동 패턴 분석·개선 사이클
# 2026-04-19 신설 — PD님 직접 지시 "장기적 문제 행동 패턴 분석 + 점진적 개선"
# 2026-04-23 확장 (BT4) — 감사관 E안 자동 윈도우 + session_restore_report 수동 발동

REPO_ROOT=$(git rev-parse --show-toplevel 2>/dev/null)
[ -z "$REPO_ROOT" ] && exit 0

CALL_DIR="$HOME/.claude/.burningtimes_auditor_calls"
WARN_DIR="$HOME/.claude/.burningtimes_warning_ignored"
BYPASS_DIR="$HOME/.claude/.burningtimes_bypass_log"

# ─────────────────────────────────────────────────────────────────────
# 감사관 E안 자동 윈도우 (BT4, 2026-04-23)
# 메커니즘: 마지막 해당 감사관 호출 시점 → 현재 = 자동 윈도우
# 최소 1일, 최대 30일 상한, --extend=N 수동 확장
# ─────────────────────────────────────────────────────────────────────
get_auditor_window() {
    local auditor_name="$1"  # pm-auditor | dev-auditor | plan-auditor
    local extend_override="$2"  # 수동 확장 (일수, 선택)

    # 수동 확장 우선
    if [ -n "$extend_override" ] && [ "$extend_override" -gt 0 ] 2>/dev/null; then
        echo "$extend_override"
        return 0
    fi

    local now=$(date +%s)
    local last_call=0

    # 호출 이력 파일 순회 (최신 로그부터)
    if [ -d "$CALL_DIR" ]; then
        for f in $(ls -t "$CALL_DIR"/*.log 2>/dev/null); do
            [ -f "$f" ] || continue
            # "pm-auditor called" 같은 패턴 grep, 최신 라인의 타임스탬프 추출
            local line=$(grep -h "${auditor_name} called" "$f" 2>/dev/null | tail -1)
            if [ -n "$line" ]; then
                # 타임스탬프가 앞에 ISO/epoch 형태로 있다고 가정. epoch 시도
                local ts=$(echo "$line" | grep -oE '[0-9]{10}' | head -1)
                if [ -n "$ts" ]; then
                    last_call=$ts
                    break
                fi
                # ISO 시도 (date 명령)
                local iso=$(echo "$line" | grep -oE '[0-9]{4}-[0-9]{2}-[0-9]{2}[T ][0-9]{2}:[0-9]{2}(:[0-9]{2})?' | head -1)
                if [ -n "$iso" ]; then
                    last_call=$(date -d "$iso" +%s 2>/dev/null || echo 0)
                    [ "$last_call" -gt 0 ] && break
                fi
            fi
        done
    fi

    # 마지막 호출 없으면 기본 7일 (초기·PC 이관 대비)
    if [ "$last_call" -eq 0 ]; then
        echo 7
        return 0
    fi

    # 공백일수 계산
    local gap_sec=$((now - last_call))
    local gap_days=$((gap_sec / 86400))

    # 최소 1일·최대 30일 상한
    [ "$gap_days" -lt 1 ] && gap_days=1
    [ "$gap_days" -gt 30 ] && gap_days=30

    echo "$gap_days"
}

# ─────────────────────────────────────────────────────────────────────
# BT4 6계층 운영 모니터링 — session_restore_report
# project_context_조직운영_archive.md 첫 엔트리 이동 시점 또는 수동 발동
# ─────────────────────────────────────────────────────────────────────
generate_session_restore_report() {
    local arch_file="$REPO_ROOT/memory/org/project_context_조직운영_archive.md"
    local ts=$(date +%Y-%m-%d_%H%M)
    local report="$REPO_ROOT/memory/org/audit_pattern_analysis_6계층_${ts}.md"

    {
        echo "---"
        echo "name: 세션 시작 교훈 환기 6계층 운영 모니터링 보고서 (${ts})"
        echo "description: BT4 6계층 체계 운영 데이터 누적 분석. pm-auditor 지속 모니터링 SOT 기반. 개선 안건 식별 + PD 보고"
        echo "type: audit_pattern"
        echo "period: ${ts}"
        echo "trigger: $([ -s "$arch_file" ] && echo 'archive_entry_moved' || echo 'manual')"
        echo "---"
        echo ""
        echo "# BT4 6계층 운영 모니터링 보고서 — ${ts}"
        echo ""
        echo "## 1. 트리거 상태"
        if [ -s "$arch_file" ]; then
            local arch_count=$(grep -c "^- \[" "$arch_file" 2>/dev/null || echo 0)
            echo "- project_context_조직운영_archive.md 엔트리 수: $arch_count"
        else
            echo "- 수동 발동 (archive 미이동)"
        fi
        echo ""
        echo "## 2. 감사관 E안 자동 윈도우 실측"
        for a in pm-auditor dev-auditor plan-auditor; do
            local w=$(get_auditor_window "$a")
            echo "- ${a}: ${w}일"
        done
        echo ""
        echo "## 3. 계층별 발동 통계 (pm-auditor 수동 기입 영역)"
        echo "- 계층 0 고정 주입: 매 세션 1회 (기본 전제)"
        echo "- 계층 1 (1일): (기입)"
        echo "- 계층 2 (2~7일): (기입)"
        echo "- 계층 3 (>7일): (기입)"
        echo "- 계층 4 (--extend=N): (기입)"
        echo "- 계층 5 (내용축 트리거): (기입)"
        echo ""
        echo "## 4. 개선 안건 (pm-auditor 수동 기입)"
        echo "- (계층 추가·폐기·통합 / 트리거 조정 / 계층 0 대상 조정 / 감사관 윈도우 튜닝)"
        echo ""
        echo "## 5. PD 결정 요청"
        echo "- (pm-auditor 우선순위 기입)"
        echo ""
        echo "## 연관"
        echo "- \`memory/org/feedback_session_restore_monitoring.md\` (모니터링 SOT)"
        echo "- \`memory/org/project_context_조직운영.md\` (트리거 기반)"
        echo "- \`scripts/recent_feedback_brief.sh\` (6계층 구현)"
    } > "$report"
    echo "📊 [BT4 6계층] 운영 모니터링 보고서 생성: $report"
}

# 미해소 경고 건수 집계 (UNRESOLVED - RESOLVED)
UNRESOLVED_NET=0
if [ -d "$WARN_DIR" ]; then
  for f in "$WARN_DIR"/*.log; do
    [ -f "$f" ] || continue
    U=$(grep -c "UNRESOLVED" "$f" 2>/dev/null || echo 0)
    R=$(grep -c "RESOLVED" "$f" 2>/dev/null || echo 0)
    UNRESOLVED_NET=$((UNRESOLVED_NET + U - R))
  done
fi

# 세션 시작 시 미해소 경고 있으면 PD님 환기 출력 (stdout — 세션 컨텍스트 주입)
if [ "$UNRESOLVED_NET" -gt 0 ]; then
  echo "🚨 [C35 경고 무시 사례] 미해소 $UNRESOLVED_NET 건 — PD님 우선 보고 대상 (감사 자산 축적)"
  echo "   상세: $WARN_DIR/"
  echo "   PM 후속 조치: 경고 대상 review + pm-auditor 호출 or 사유를 memory/org/feedback_pm_warning_ignored_pattern.md에 기록"
fi

# 수동 발동 명령 처리 (BT4 2026-04-23 확장)
TRIGGER="${1:-auto}"

# auditor_window <감사관명> [--extend=N] — E안 자동 윈도우 조회
if [ "$TRIGGER" = "auditor_window" ]; then
    AUDITOR="${2:-pm-auditor}"
    EXTEND=""
    if [ "$3" = "--extend" ] && [ -n "$4" ]; then
        EXTEND="$4"
    fi
    get_auditor_window "$AUDITOR" "$EXTEND"
    exit 0
fi

# session_restore_report — BT4 6계층 운영 모니터링 보고서 수동 발동
if [ "$TRIGGER" = "session_restore_report" ]; then
    generate_session_restore_report
    exit 0
fi

# project_context_조직운영_archive.md 첫 엔트리 감지 → 자동 보고서 생성
ARCHIVE_FILE="$REPO_ROOT/memory/org/project_context_조직운영_archive.md"
AUTO_SESSION_REPORT_FLAG="$HOME/.claude/.burningtimes_bt4_session_report_done"
if [ -f "$ARCHIVE_FILE" ] && grep -q "^- \[" "$ARCHIVE_FILE" 2>/dev/null && [ ! -f "$AUTO_SESSION_REPORT_FLAG" ]; then
    generate_session_restore_report
    touch "$AUTO_SESSION_REPORT_FLAG"
    echo "📌 [BT4] archive 첫 엔트리 감지 — 운영 모니터링 보고서 자동 생성 (재발동 금지 플래그 설정)"
fi

# 월별 패턴 분석 보고서 (월 1일 자동 or 수동 `report` 인자)
MONTH=$(date +%Y_%m)
REPORT="$REPO_ROOT/memory/org/audit_pattern_analysis_${MONTH}.md"

if [ "$TRIGGER" = "report" ] || { [ "$(date +%d)" = "01" ] && [ ! -f "$REPORT" ]; }; then
  {
    echo "---"
    echo "name: 감사 패턴 월별 분석 ${MONTH/_/-}"
    echo "description: pm-auditor 호출·경고 무시·BYPASS 우회 이력 누적 분석. 장기 행동 패턴 기록 + 개선 안건 식별 (C35-10)"
    echo "type: audit_pattern"
    echo "period: ${MONTH/_/-}"
    echo "---"
    echo ""
    echo "# 감사 패턴 분석 — ${MONTH/_/-}"
    echo ""
    echo "## pm-auditor 호출 빈도"
    if [ -d "$CALL_DIR" ]; then
      TOTAL_CALLS=0
      for f in "$CALL_DIR"/*.log; do
        [ -f "$f" ] || continue
        C=$(grep -c "pm-auditor called" "$f" 2>/dev/null || echo 0)
        TOTAL_CALLS=$((TOTAL_CALLS + C))
      done
      echo "- 누적 호출 건수: $TOTAL_CALLS"
    fi
    echo ""
    echo "## 경고 무시 사례 (UNRESOLVED)"
    echo "- 미해소 순수 건수: $UNRESOLVED_NET"
    if [ -d "$WARN_DIR" ]; then
      echo ""
      echo "### 최근 UNRESOLVED 샘플 (최대 20건)"
      grep "UNRESOLVED" "$WARN_DIR"/*.log 2>/dev/null | head -20
    fi
    echo ""
    echo "## BYPASS 우회 이력"
    if [ -d "$BYPASS_DIR" ]; then
      BYPASS_COUNT=0
      for f in "$BYPASS_DIR"/*.log; do
        [ -f "$f" ] || continue
        B=$(wc -l < "$f" 2>/dev/null || echo 0)
        BYPASS_COUNT=$((BYPASS_COUNT + B))
      done
      echo "- 누적 우회 건수: $BYPASS_COUNT"
    fi
    echo ""
    echo "## 개선 안건 (PM 수동 기입)"
    echo "- (분석 로직 추가 확장 필요 — PM review 후 규칙 개정·감사 체크 강화 안건화)"
    echo ""
    echo "## 연관"
    echo "- C35-9 hook 3층 구조 · C35-10 경고 무시 PD 보고·장기 패턴 분석"
    echo "- \`memory/org/feedback_pm_warning_ignored_pattern.md\` (누적 SOT)"
  } > "$REPORT"
  echo "📊 [감사 패턴] 월별 분석 보고서 생성: $REPORT"
fi

exit 0
