#!/usr/bin/env python3
"""Odds Arbitrage Scanner (v0, no deps).

Usage: python3 arb_scanner.py odds.json
Input: odds from multiple sportsbooks keyed by game id.
Example:
[
 {"game":"LAL vs GSW","book":"BookA","home_odds":2.10,"away_odds":1.85},
 {"game":"LAL vs GSW","book":"BookB","home_odds":2.05,"away_odds":1.90}
]
Output: matched games with implied probabilities and arbitrage flags.
"""
import json, sys, itertools
from collections import defaultdict

def implied(o): return 1.0/o

def main(path):
    rows=json.load(open(path))
    by_game=defaultdict(list)
    for r in rows:
        by_game[r['game']].append(r)
    out=[]
    for game, offers in by_game.items():
        # best odds across books for each side
        best_home=max(offers, key=lambda o: o['home_odds'])
        best_away=max(offers, key=lambda o: o['away_odds'])
        ih=implied(best_home['home_odds']); ia=implied(best_away['away_odds'])
        total=ih+ia
        arb = total < 1.0
        stake_total=100.0
        stakes={'home': round(stake_total*ih/total,2), 'away': round(stake_total*ia/total,2)}
        out.append({
            'game': game,
            'best_home': {'book': best_home['book'], 'odds': best_home['home_odds']},
            'best_away': {'book': best_away['book'], 'odds': best_away['away_odds']},
            'implied_total': round(total,4),
            'is_arbitrage': arb,
            'guaranteed_return_pct': round((1-total)*100,2) if arb else 0,
            'suggested_stakes_100usd': stakes,
        })
    print(json.dumps({'opportunities':out}, indent=2))

if __name__=='__main__': main(sys.argv[1])
