#!/usr/bin/env python3
"""Engram hook — fires on CC session Stop.

Saves a breadcrumb to the queue for the next /engram replay.
Uses only Python stdlib — no external dependencies.
"""

import json
import os
import sys
from datetime import datetime
from pathlib import Path


CONFIG_PATH = Path(os.environ.get("ENGRAM_CONFIG", str(Path.home() / ".engram" / "config.json")))
FALLBACK_VAULT = Path.home() / ".engram" / "vault"


def _get_vault():
    """Load vault path from config, falling back to default."""
    try:
        with open(CONFIG_PATH) as f:
            return Path(json.load(f).get("vault", str(FALLBACK_VAULT)))
    except (FileNotFoundError, json.JSONDecodeError):
        return FALLBACK_VAULT


def main():
    event_type = sys.argv[1] if len(sys.argv) > 1 else ""
    if event_type.lower() != "stop":
        return

    vault_dir = _get_vault()
    queue_dir = vault_dir / "_meta" / "queue"
    enabled_flag = vault_dir / "_meta" / "hook-enabled"

    # Check kill switch
    if not enabled_flag.exists():
        return

    # Read hook payload from stdin
    try:
        payload = json.load(sys.stdin)
    except (json.JSONDecodeError, ValueError):
        return

    session_id = payload.get("session_id", "unknown")
    last_message = payload.get("last_assistant_message", "")

    # Skip trivial sessions
    if not last_message or len(last_message) < 50:
        return

    queue_dir.mkdir(parents=True, exist_ok=True)

    breadcrumb = {
        "session_id": session_id,
        "timestamp": datetime.now().isoformat(),
        "stop_reason": payload.get("stop_reason", ""),
        "last_message_preview": last_message[:500],
        "status": "pending",
    }

    queue_file = queue_dir / f"{datetime.now().strftime('%Y%m%d-%H%M%S')}-{session_id[:8]}.json"
    with open(queue_file, "w") as f:
        json.dump(breadcrumb, f, indent=2)


if __name__ == "__main__":
    main()
