#!/usr/bin/env python3
"""Summarize a bounded JSON HTTP response without emitting business row values."""
import hashlib
import json
import sys

body = json.load(sys.stdin)
data = body.get("data")
stack = [(data, 0)]
objects = 0
lists = 0
max_depth = 0
key_sets = set()
while stack:
    value, depth = stack.pop()
    max_depth = max(max_depth, depth)
    if isinstance(value, dict):
        objects += 1
        key_sets.add(tuple(sorted(value.keys())))
        stack.extend((item, depth + 1) for item in value.values())
    elif isinstance(value, list):
        lists += 1
        stack.extend((item, depth + 1) for item in value)
    if objects + lists > 200000:
        raise SystemExit("DENIED: response tree over cap")
first = data[0] if isinstance(data, list) and data else None
type_map = ({key: type(value).__name__ for key, value in first.items()}
            if isinstance(first, dict) else None)
digest = hashlib.sha256(json.dumps(data, ensure_ascii=False,
    sort_keys=True, separators=(",", ":")).encode()).hexdigest()
print(json.dumps({
    "code": body.get("code"), "message": body.get("message"),
    "data_type": type(data).__name__,
    "top_count": len(data) if isinstance(data, (dict, list)) else None,
    "object_nodes": objects, "list_nodes": lists, "max_depth": max_depth,
    "unique_key_sets": len(key_sets), "first_item_types": type_map,
    "canonical_data_sha256": digest,
}, ensure_ascii=False))
