"""Check this toy's exact catalog contract; missing is an error, not an empty list."""
import argparse
import json
from pathlib import Path
import sys

ROOT = Path(__file__).resolve().parents[1]
EXPECTED = [{"id": "alpha", "label": "Alpha"}, {"id": "beta", "label": "Beta"}]


def checked_bytes(path):
    if not path.is_file():
        raise ValueError("missing catalog: " + str(path))
    payload = path.read_bytes()
    if json.loads(payload) != EXPECTED:
        raise ValueError("catalog does not match the two-entry contract")
    expected_bytes = (json.dumps(EXPECTED, separators=(",", ":")) + "\n").encode()
    if payload != expected_bytes:
        raise ValueError("catalog bytes are not the canonical serialization")
    return payload


def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("--catalog", type=Path, default=ROOT / "build/catalog.json")
    args = parser.parse_args()
    try:
        payload = checked_bytes(args.catalog)
    except (OSError, ValueError) as error:
        print(str(error), file=sys.stderr)
        return 1
    print(json.dumps({"check": "ok", "entries": 2, "bytes": len(payload)}))
    return 0


if __name__ == "__main__":
    sys.exit(main())
