"""
Betway Nigeria authenticated session discovery.
Captures all feeds-roa2 API calls after login.

Usage: python tools/discover_betway_auth.py <username> <password>
"""
import sys
import json
import asyncio
from playwright.async_api import async_playwright


async def main(username: str, password: str):
    captured = []

    async with async_playwright() as p:
        browser = await p.chromium.launch(
            headless=False,   # visible so login can handle any CAPTCHAs
            args=['--no-sandbox'],
        )
        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()

        async def handle_response(response):
            url = response.url
            if 'feeds-roa2' in url and response.status == 200:
                ct = response.headers.get('content-type', '')
                if 'json' in ct:
                    try:
                        body = await response.json()
                        req = response.request
                        req_headers = await req.all_headers()
                        captured.append({
                            'url': url,
                            'req_headers': dict(req_headers),
                            'body': body,
                        })
                        evs = body.get('events', [])
                        print(f'[FEED] {url[:100]}  events={len(evs)}')
                    except Exception:
                        pass

        page.on('response', handle_response)

        print('→ Loading betway.com.ng ...')
        await page.goto('https://www.betway.com.ng', wait_until='domcontentloaded', timeout=30000)
        await asyncio.sleep(3)

        print('→ Attempting login ...')
        try:
            # Click login button
            await page.click('text=Log In', timeout=8000)
            await asyncio.sleep(1)

            # Fill credentials
            await page.fill('input[type="text"], input[name="username"], input[placeholder*="user" i], input[id*="user" i]', username)
            await page.fill('input[type="password"]', password)
            await page.keyboard.press('Enter')
            await asyncio.sleep(5)
            print('  Login submitted')
        except Exception as e:
            print(f'  Login UI error: {e}')
            print('  Waiting 20s — please log in manually in the browser window...')
            await asyncio.sleep(20)

        # Navigate to football page
        print('→ Navigating to football ...')
        await page.goto('https://www.betway.com.ng/sport/soccer', wait_until='domcontentloaded', timeout=20000)
        await asyncio.sleep(5)

        # Navigate to Premier League coupon
        print('→ Navigating to Premier League ...')
        await page.goto('https://www.betway.com.ng/sport/soccer/england/premier-league', wait_until='domcontentloaded', timeout=20000)
        await asyncio.sleep(5)

        for _ in range(5):
            await page.mouse.wheel(0, 600)
            await asyncio.sleep(0.8)

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

    print(f'\n{"="*70}')
    print(f'Captured {len(captured)} feeds-roa2 responses\n')

    print('All captured API paths:')
    for r in captured:
        path = r['url'].split('v1/')[1] if 'v1/' in r['url'] else r['url']
        evs = r['body'].get('events', [])
        print(f'  {path[:90]}  events={len(evs)}')

    print()
    print('Auth headers found:')
    auth_headers = set()
    for r in captured:
        for k, v in r['req_headers'].items():
            if k.lower() in ('authorization', 'x-auth-token', 'x-session', 'x-betway-token', 'bearer'):
                auth_headers.add(f'{k}: {v[:60]}')
    for h in auth_headers:
        print(f'  {h}')

    # Show endpoints with most events
    print()
    print('Endpoints with events:')
    for r in captured:
        evs = r['body'].get('events', [])
        if evs:
            path = r['url'].split('v1/')[1] if 'v1/' in r['url'] else r['url']
            prematch = [e for e in evs if not e.get('isLive')]
            print(f'\n  PATH: {path[:100]}')
            print(f'  Total={len(evs)}, Prematch={len(prematch)}')
            if prematch:
                print(f'  Sample: {prematch[0].get("homeTeam")} vs {prematch[0].get("awayTeam")}')
            custom = {k: v for k, v in r['req_headers'].items()
                      if k.lower() not in ('accept', 'user-agent', 'accept-encoding',
                                           'accept-language', 'cache-control', 'sec-fetch-dest',
                                           'sec-fetch-mode', 'sec-fetch-site', 'sec-ch-ua',
                                           'connection', 'host', ':authority', ':method',
                                           ':path', ':scheme', 'priority')}
            print(f'  Custom headers: {custom}')


if __name__ == '__main__':
    if len(sys.argv) < 3:
        print('Usage: python discover_betway_auth.py <username> <password>')
        sys.exit(1)
    asyncio.run(main(sys.argv[1], sys.argv[2]))
