#!/usr/bin/env python3
"""Session lifecycle manager for Claude Code."""
import json
import sys
import os
from datetime import datetime
from pathlib import Path

def handle_session_start(data: dict) -> dict:
    """Handle session start event - load context and state."""
    cwd = Path(data.get("cwd", "."))
    session_id = data.get("session_id", "unknown")
    context_parts = []

    for check_file, header in [
        (".claude/priorities.md", "## Priorities"),
        (".claude/blockers.md", "## Blockers"),
        (".claude/team-notes.md", "## Team Notes")
    ]:
        file_path = cwd / check_file
        if file_path.exists():
            content = file_path.read_text().strip()
            if content:
                context_parts.append(f"{header}\n{content}")

    log_session_event("start", session_id, str(cwd))

    if context_parts:
        return {
            "hookSpecificOutput": {
                "hookEventName": "SessionStart",
                "additionalContext": "\n\n".join(context_parts)
            }
        }
    return {}

def handle_session_stop(data: dict) -> dict:
    """Handle session stop event - cleanup and metrics."""
    session_id = data.get("session_id", "unknown")
    transcript_path = data.get("transcript_path")
    cwd = data.get("cwd", ".")
    log_session_event("stop", session_id, cwd)
    if transcript_path and os.path.exists(transcript_path):
        archive_transcript(session_id, transcript_path)
    return {}

def log_session_event(event_type: str, session_id: str, cwd: str):
    """Log session event to metrics file."""
    log_dir = Path.home() / ".claude" / "metrics"
    log_dir.mkdir(parents=True, exist_ok=True)
    log_entry = {
        "event": event_type, "session_id": session_id, "cwd": cwd,
        "timestamp": datetime.now().isoformat()
    }
    with open(log_dir / "sessions.jsonl", "a") as f:
        f.write(json.dumps(log_entry) + "\n")

def archive_transcript(session_id: str, transcript_path: str):
    """Archive transcript to persistent storage."""
    import shutil
    archive_dir = Path.home() / ".claude" / "transcripts"
    archive_dir.mkdir(parents=True, exist_ok=True)
    timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
    try:
        shutil.copy2(transcript_path, archive_dir / f"{timestamp}_{session_id}.jsonl")
    except Exception:
        pass

def main():
    try:
        data = json.load(sys.stdin)
    except json.JSONDecodeError:
        sys.exit(0)
    event = data.get("hook_event_name", "")
    result = handle_session_start(data) if event == "SessionStart" else (
        handle_session_stop(data) if event == "SessionStop" else {}
    )
    if result:
        print(json.dumps(result))
    sys.exit(0)

if __name__ == "__main__":
    main()
