import hashlib
import json
import pathlib
import urllib.request

def clean(x):
    if isinstance(x, dict):
        return {k: clean(v) for k, v in x.items()
                if not any(s in k.lower() for s in ('uri', 'url', 'token', 'password', 'secret', 'host'))}
    if isinstance(x, list):
        return [clean(v) for v in x]
    if isinstance(x, str) and '://' in x:
        return '<endpoint omitted>'
    return x

for endpoint in ('/health', '/api/v1/streams?detail=true'):
    try:
        with urllib.request.urlopen('http://127.0.0.1:5000' + endpoint, timeout=15) as r:
            value = json.load(r)
        if endpoint.startswith('/api'):
            rows = value if isinstance(value, list) else value.get('streams', value.get('items', []))
            print(json.dumps({'endpoint': endpoint, 'schema': list(value) if isinstance(value, dict) else 'list',
                              'streams': [clean(row) for row in rows]}, default=str))
        else:
            print(json.dumps({'endpoint': endpoint, 'result': clean(value)}))
    except Exception as e:
        print(json.dumps({'endpoint': endpoint, 'error_type': type(e).__name__}))

import yaml
for filename in ('/var/lib/contextra/runtime/streams_runtime.yaml', '/etc/contextra/streams.yaml'):
    p = pathlib.Path(filename)
    if not p.exists():
        continue
    raw = p.read_bytes()
    data = yaml.safe_load(raw)
    rows = data if isinstance(data, list) else data.get('streams', data.get('added', []))
    if isinstance(rows, dict):
        rows = list(rows.values())
    matches = [r for r in rows if str(r.get('camera_id', r.get('source_id'))) == '23']
    print(json.dumps({'config': filename, 'sha256': hashlib.sha256(raw).hexdigest(),
                      'schema': list(data) if isinstance(data, dict) else 'list',
                      'camera23': [clean(r) for r in matches]}, default=str))
