#!/usr/bin/env python3
import json, sys

REQUIRED = ("property", "referent", "evaluated_at", "evidence")

def classify(x):
    if not isinstance(x, dict):
        return "REFUSE", "carrier must be an object"
    missing = [k for k in REQUIRED if k not in x]
    if missing:
        return "UNKNOWN", "missing required fields: " + ",".join(missing)
    ref = x["referent"]
    if not isinstance(ref, dict) or not ref.get("route") or not ref.get("mode") or not ref.get("contract_version"):
        return "REFUSE", "referent must bind route, mode, and contract_version"
    if not isinstance(x["evidence"], list) or not x["evidence"]:
        return "UNKNOWN", "evidence must contain at least one receipt"
    if not isinstance(x["evaluated_at"], str) or not x["evaluated_at"].endswith("Z"):
        return "REFUSE", "evaluated_at must be an RFC3339 UTC string"
    return "PASS", "bound carrier"

def main():
    cases = json.load(open(sys.argv[1]))
    expected = [c["expected"] for c in cases]
    got = [classify(c["input"])[0] for c in cases]
    assert got == expected, (got, expected)
    print(json.dumps({"cases": len(cases), "results": got, "assertions": "PASS"}))

if __name__ == "__main__": main()
