"""
Capture WebSocket messages from Surebet247 to find the events/odds data stream.
"""
import json
import asyncio
from playwright.async_api import async_playwright


async def main():
    ws_messages = []
    http_captured = []

    async with async_playwright() as p:
        browser = await p.chromium.launch(
            headless=True,
            args=['--no-sandbox', '--disable-blink-features=AutomationControlled'],
        )
        ctx = await browser.new_context(
            user_agent='Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36',
            viewport={'width': 1280, 'height': 900},
        )
        page = await ctx.new_page()

        # Capture WebSockets
        def on_websocket(ws):
            url = ws.url
            print(f'[WS OPEN] {url}')

            def on_frame_sent(payload):
                ws_messages.append({'dir': 'sent', 'url': url, 'data': payload[:500] if isinstance(payload, str) else repr(payload[:200])})
                print(f'  [WS SENT] {str(payload)[:200]}')

            def on_frame_received(payload):
                ws_messages.append({'dir': 'recv', 'url': url, 'data': payload[:500] if isinstance(payload, str) else repr(payload[:200])})
                print(f'  [WS RECV] {str(payload)[:300]}')

            ws.on('framesent', lambda p: on_frame_sent(p))
            ws.on('framereceived', lambda p: on_frame_received(p))
            ws.on('close', lambda: print(f'[WS CLOSE] {url}'))

        page.on('websocket', on_websocket)

        # Also capture sport-specific HTTP
        async def handle_response(response):
            url = response.url
            if 'sport-iframe' in url and response.status == 200:
                ct = response.headers.get('content-type', '')
                if 'json' in ct:
                    try:
                        body = await response.json()
                        body_str = json.dumps(body)
                        if any(k in body_str for k in ['"competitors"', '"markets"', '"selections"', '"price"', '"odds"']):
                            http_captured.append({'url': url, 'body': body})
                            print(f'[HTTP JSON with data] {url[:100]}')
                    except Exception:
                        pass

        page.on('response', handle_response)

        print('→ Loading football page...')
        await page.goto('https://www.surebet247.com/sport/football', wait_until='domcontentloaded', timeout=30000)
        await asyncio.sleep(8)

        print('→ Scrolling to load events...')
        for _ in range(10):
            await page.mouse.wheel(0, 500)
            await asyncio.sleep(0.8)

        await asyncio.sleep(5)
        await browser.close()

    print(f'\n{"="*70}')
    print(f'WebSocket messages: {len(ws_messages)}')
    print(f'HTTP JSON with data: {len(http_captured)}')

    if ws_messages:
        print('\n=== WebSocket Messages (first 20) ===')
        for msg in ws_messages[:20]:
            print(f'[{msg["dir"]}] {msg["url"][:80]}')
            print(f'  {str(msg["data"])[:400]}')
            print()

    if http_captured:
        print('\n=== HTTP endpoints with odds/market data ===')
        for r in http_captured:
            print(f'\nURL: {r["url"]}')
            print(json.dumps(r['body'], indent=2)[:1000])
            print('-' * 60)


asyncio.run(main())
