from __future__ import annotations

import argparse
import json
from pathlib import Path


ROOT = Path(__file__).resolve().parents[1]


def _scan(path: Path) -> list[dict[str, str]]:
    text = path.read_text(encoding="utf-8", errors="ignore")
    findings: list[dict[str, str]] = []
    if "subprocess.run" in text and "cwd=" not in text:
        findings.append({"file": str(path.relative_to(ROOT)), "reason": "subprocess_without_root_cwd"})
    if "requests." in text or "pandas." in text or "numpy." in text:
        findings.append({"file": str(path.relative_to(ROOT)), "reason": "heavy_dependency_in_tool"})
    return findings


def main() -> int:
    ap = argparse.ArgumentParser()
    ap.add_argument("--root", default="tools")
    ap.add_argument("--max-findings", type=int, default=0)
    args = ap.parse_args()

    root = (ROOT / args.root).resolve()
    findings: list[dict[str, str]] = []
    for path in sorted(root.rglob("*.py")):
        if path.name.startswith("validate_tool_thin_wrapper"):
            continue
        if path.name in {
            "validate_golden_coverage_100.py",
            "validate_harness_coverage_auditor.py",
            "validate_engine_harness_gate.py",
        }:
            continue
        findings.extend(_scan(path))

    gate = "PASS" if len(findings) <= args.max_findings else "FAIL"
    payload = {
        "formula_id": "TOOL_THIN_WRAPPER_V1",
        "gate": gate,
        "thin_wrapper_findings": len(findings),
        "findings": findings[:200],
    }
    out = ROOT / "Temp" / "tool_thin_wrapper_v1.json"
    out.write_text(json.dumps(payload, ensure_ascii=False, indent=2), encoding="utf-8")
    print(json.dumps(payload, ensure_ascii=True, indent=2))
    return 0 if gate == "PASS" else 1


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