"""
Inspect the GetMainMarketsByProfileAndEventIds RPC calls in the Surebet247 WS feed
to see what profile value is sent, and try different profile values to find DC.

Usage:
    python3 tools/discover_surebet247_profiles.py
"""
import sys, os
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..'))

import time, collections
import msgpack
from scrapers.surebet247 import _Surebet247Worker, _decode_frame

BASE_SITE  = 'https://www.surebet247.com'

def capture_sent_frames(page) -> list:
    frames_recv = []
    frames_sent = []
    last_recv   = [time.time()]

    def handle_ws(ws):
        if 'direct-feed' not in ws.url:
            return
        ws.on('framereceived', lambda p: (frames_recv.append(p), last_recv.__setitem__(0, time.time())) if isinstance(p, bytes) else None)
        ws.on('framesent',     lambda p: frames_sent.append(p) if isinstance(p, bytes) else None)

    page.on('websocket', handle_ws)
    page.goto(f'{BASE_SITE}/sport/football', wait_until='domcontentloaded', timeout=60_000)
    time.sleep(8)
    for _ in range(8):
        page.mouse.wheel(0, 700)
        time.sleep(0.6)
    deadline = time.time() + 25
    while time.time() < deadline:
        time.sleep(1)
        if time.time() - last_recv[0] > 3.0 and frames_recv:
            break
    try:
        page.remove_listener('websocket', handle_ws)
    except Exception:
        pass
    return frames_sent

if __name__ == '__main__':
    worker = _Surebet247Worker()
    print('Capturing sent frames...')
    sent = worker.call(capture_sent_frames, timeout=120)

    print(f'\nSent frames: {len(sent)}\n')
    for i, frame in enumerate(sent):
        decoded = _decode_frame(frame)
        if not decoded:
            continue
        if isinstance(decoded, (list, tuple)) and len(decoded) >= 4:
            msg_type = decoded[0]
            req_id   = decoded[2]
            method   = decoded[3] if len(decoded) > 3 else '?'
            args     = decoded[4] if len(decoded) > 4 else []
            print(f'  [{i}] type={msg_type} id={req_id} method={method}')
            if args:
                print(f'       args={args}')
