"""
Quick smoke-test for all live scrapers.
Calls get_live_events('football') on each and reports event count + sample.

Usage:
    cd /home/cyborg/Desktop/claude/arb_bot
    python3 tools/test_live.py [scraper_name ...]

    # Test all:
    python3 tools/test_live.py

    # Test specific:
    python3 tools/test_live.py sportybet 1xbet betking
"""
import sys
import os
import time
import logging

sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

logging.basicConfig(
    level=logging.WARNING,   # suppress verbose scraper logs
    format='%(asctime)s [%(levelname)s] %(name)s: %(message)s',
    datefmt='%H:%M:%S',
)
# Show our own output at INFO
logging.getLogger('__main__').setLevel(logging.INFO)

SCRAPERS = {
    'sportybet':  ('scrapers.sportybet',  'SportyBetScraper'),
    '1xbet':      ('scrapers.oneXbet',    'OneXBetScraper'),
    'betwinner':  ('scrapers.betwinner',  'BetWinnerScraper'),
    '1win':       ('scrapers.onewin',     'OneWinScraper'),
    'msport':     ('scrapers.msport',     'MSportScraper'),
    'betking':    ('scrapers.betking',    'BetKingScraper'),
    'nairabet':   ('scrapers.nairabet',   'NairaBetScraper'),
    'betpawa':    ('scrapers.betpawa',    'BetpawaScraper'),
    'bcgame':     ('scrapers.bcgame',     'BCGameScraper'),
    'stake':      ('scrapers.stake',      'StakeScraper'),
    'surebet247': ('scrapers.surebet247', 'Surebet247Scraper'),
    'accessbet':  ('scrapers.accessbet',  'AccessbetScraper'),
    'betway':     ('scrapers.betway',     'BetwayScraper'),
}

SPORT = 'football'
COL   = 28   # column width for alignment

def load_scraper(module_path, class_name):
    import importlib
    mod = importlib.import_module(module_path)
    return getattr(mod, class_name)()


def test_one(name, module_path, class_name):
    print(f'  {name:<{COL}}', end='', flush=True)
    try:
        scraper = load_scraper(module_path, class_name)
        t0 = time.time()
        events = scraper.get_live_events(SPORT)
        elapsed = time.time() - t0

        if not events:
            print(f'0 events  ({elapsed:.1f}s)  ⚠ no live data')
            return False

        # Show sample
        e = events[0]
        sample = f'{e.home_team} vs {e.away_team} | {e.market} | ' \
                 f'{", ".join(f"{o.name}={o.odds}" for o in e.outcomes[:3])}'
        print(f'{len(events)} events  ({elapsed:.1f}s)')
        print(f'  {"":<{COL}}sample: {sample[:90]}')
        return True

    except Exception as ex:
        print(f'ERROR: {ex}')
        return False


def main():
    targets = sys.argv[1:] if len(sys.argv) > 1 else list(SCRAPERS.keys())
    unknown = [t for t in targets if t not in SCRAPERS]
    if unknown:
        print(f'Unknown scrapers: {unknown}')
        print(f'Available: {list(SCRAPERS.keys())}')
        sys.exit(1)

    print(f'\n{"="*60}')
    print(f'  Live scraper test  |  sport={SPORT}')
    print(f'{"="*60}')

    results = {}
    for name in targets:
        mod, cls = SCRAPERS[name]
        ok = test_one(name, mod, cls)
        results[name] = ok

    print(f'\n{"="*60}')
    passed = sum(results.values())
    total  = len(results)
    print(f'  Results: {passed}/{total} returned live events')
    skipped = [n for n, ok in results.items() if not ok]
    if skipped:
        print(f'  No data: {", ".join(skipped)}')
    print(f'{"="*60}\n')


if __name__ == '__main__':
    main()
