#!/usr/bin/env python3
"""PostToolUse hook: record index evidence and files changed by successful tools."""

from __future__ import annotations

from hook_common import (
    command_text,
    direct_tool_paths,
    ensure_session,
    evidence_observed,
    is_command_tool,
    is_mutation_tool,
    load_policy,
    locked_state,
    project_root,
    read_event,
    required_evidence,
)


def main() -> int:
    event = read_event()
    root = project_root(event)
    policy = load_policy(root)
    session_id = ensure_session(root, event)
    required = required_evidence(root, policy)
    optional = [
        str(item.get("path") if isinstance(item, dict) else item)
        for item in policy.get("optional_evidence", [])
    ]
    observed = evidence_observed(event, root, required + optional)
    touched = direct_tool_paths(event, root) if is_mutation_tool(event) else []

    with locked_state(root, session_id) as state:
        state["evidence"] = sorted(set(state.get("evidence", [])) | set(observed))
        state["touched_files"] = sorted(set(state.get("touched_files", [])) | set(touched))
        if is_command_tool(event) and command_text(event):
            state["rescan_required"] = True
    return 0


if __name__ == "__main__":
    raise SystemExit(main())

