#!/usr/bin/env python3
"""Validate or query the checked-in golden-CI flake registry."""

import argparse
import json
from pathlib import Path
import sys

REGISTRY = Path(__file__).with_name("flake-registry.json")
REQUIRED_ENTRY_KEYS = {
    "test_id",
    "platform",
    "status",
    "introduced_from_red_sha",
    "confirmation",
    "retire_when",
}
REQUIRED_CONFIRMATION_KEYS = {
    "method",
    "sha",
    "run_id",
    "run_url",
    "conclusion",
    "reported_by",
    "reported_at",
}


def load_registry() -> dict:
    with REGISTRY.open(encoding="utf-8") as source:
        registry = json.load(source)
    if registry.get("schema_version") != 1:
        raise ValueError("schema_version must be 1")
    entries = registry.get("entries")
    if not isinstance(entries, list):
        raise ValueError("entries must be an array")
    seen: set[tuple[str, str]] = set()
    for index, entry in enumerate(entries):
        missing = REQUIRED_ENTRY_KEYS - entry.keys()
        if missing:
            raise ValueError(f"entry {index} missing {sorted(missing)}")
        key = (entry["test_id"], entry["platform"])
        if key in seen:
            raise ValueError(f"duplicate entry {key}")
        seen.add(key)
        if entry["status"] not in {"active", "retired"}:
            raise ValueError(f"entry {index} has invalid status")
        if not entry["retire_when"].strip():
            raise ValueError(f"entry {index} has no retirement condition")
        confirmation = entry["confirmation"]
        missing_confirmation = REQUIRED_CONFIRMATION_KEYS - confirmation.keys()
        if missing_confirmation:
            raise ValueError(
                f"entry {index} confirmation missing {sorted(missing_confirmation)}"
            )
        if confirmation["method"] != "same-sha-rerun":
            raise ValueError(f"entry {index} was not confirmed by same-SHA rerun")
        if confirmation["sha"] != entry["introduced_from_red_sha"]:
            raise ValueError(f"entry {index} confirmation SHA differs from red SHA")
        if confirmation["conclusion"] != "pass":
            raise ValueError(f"entry {index} confirmation is not green")
    return registry


def main() -> int:
    parser = argparse.ArgumentParser()
    parser.add_argument("--match", metavar="TEST_ID")
    parser.add_argument("--platform", choices=("linux", "windows"))
    args = parser.parse_args()
    try:
        registry = load_registry()
    except (OSError, json.JSONDecodeError, ValueError) as error:
        print(f"FLAKE_REGISTRY_INVALID: {error}", file=sys.stderr)
        return 1
    if args.match:
        matches = [
            entry
            for entry in registry["entries"]
            if entry["status"] == "active"
            and entry["test_id"] == args.match
            and (args.platform is None or entry["platform"] == args.platform)
        ]
        if not matches:
            return 1
        print(json.dumps(matches[0], sort_keys=True))
        return 0
    print(f"FLAKE_REGISTRY_OK: {len(registry['entries'])} entries")
    return 0


if __name__ == "__main__":
    raise SystemExit(main())
