import asyncio, json, sys
import websockets

async def main():
    uri = "wss://ourworldoftext.com/ws/"
    async with websockets.connect(uri, origin="https://ourworldoftext.com",
            additional_headers={"User-Agent":"Mozilla/5.0 (X11; Linux x86_64) Chrome/120"},
            max_size=None, open_timeout=20) as ws:
        print("CONNECTED", file=sys.stderr)
        # fetch a 3x3 tile block around origin
        await ws.send(json.dumps({"kind":"fetch","fetchRectangles":[{"minX":-1,"minY":-1,"maxX":1,"maxY":1}]}))
        await ws.send(json.dumps({"kind":"chathistory"}))
        seen_kinds = {}
        import time
        t0 = time.monotonic()
        while time.monotonic() - t0 < 8:
            try:
                msg = await asyncio.wait_for(ws.recv(), timeout=6)
            except asyncio.TimeoutError:
                break
            data = json.loads(msg)
            k = data.get("kind")
            seen_kinds[k] = seen_kinds.get(k,0)+1
            if k == "fetch":
                tiles = data.get("tiles",{})
                print("FETCH tiles keys:", list(tiles.keys()))
                for key,val in tiles.items():
                    if not val:
                        print(f"  {key}: <empty/null>"); continue
                    content = val.get("content","")
                    props = val.get("properties",{})
                    nonspace = sum(1 for c in content if c not in (' ',' '))
                    print(f"  {key}: len(content)={len(content)} nonspace={nonspace} propkeys={list(props.keys())}")
                    if nonspace:
                        print("    text:", repr(content))
                        if "color" in props:
                            col = props["color"]
                            print("    color type:", type(col).__name__, "len:", len(col) if hasattr(col,'__len__') else '?', "sample:", (col[:8] if isinstance(col,list) else str(col)[:40]))
            elif k == "chathistory":
                for field in ("global","page","messages"):
                    if field in data:
                        v = data[field]
                        print(f"CHATHISTORY.{field}: {len(v) if hasattr(v,'__len__') else v} items")
                        if isinstance(v,list) and v:
                            print("   sample:", json.dumps(v[-1])[:300])
                print("CHATHISTORY keys:", list(data.keys()))
            elif k == "channel":
                print("CHANNEL id=", data.get("id"), "channel=", data.get("channel"))
            elif k == "chat":
                print("LIVE CHAT:", json.dumps(data)[:200])
            else:
                print("KIND", k, "keys:", list(data.keys()))
        print("SEEN KINDS:", seen_kinds, file=sys.stderr)

asyncio.run(main())
