#!/usr/bin/env python3
import hashlib
import json
import sys
from datetime import datetime, timedelta
from urllib.request import urlopen


LEAGUES = [
    "eng.1",        # EPL
    "esp.1",        # La Liga
    "ita.1",        # Serie A
    "ger.1",        # Bundesliga
    "fra.1",        # Ligue 1
    "uefa.champions",
]


def fetch_json(url):
    with urlopen(url, timeout=30) as resp:
        return json.loads(resp.read().decode("utf-8"))


def hash_payload(payload):
    return hashlib.sha256(json.dumps(payload, sort_keys=True).encode("utf-8")).hexdigest()


def main():
    # Default: yesterday's date for completed games
    target_date = (datetime.utcnow() - timedelta(days=1)).strftime("%Y%m%d")
    base = "https://site.web.api.espn.com/apis/site/v2/sports/soccer"

    records = []
    for league in LEAGUES:
        scoreboard_url = f"{base}/{league}/scoreboard?dates={target_date}"
        try:
            scoreboard = fetch_json(scoreboard_url)
            events = scoreboard.get("events", [])
        except Exception as e:
            records.append({"league": league, "error": str(e)})
            continue

        for event in events:
            event_id = event.get("id")
            if not event_id:
                continue
            summary_url = f"{base}/{league}/summary?event={event_id}"
            try:
                summary = fetch_json(summary_url)
            except Exception as e:
                records.append({"league": league, "eventId": event_id, "error": str(e)})
                continue

            payload = {
                "league": league,
                "eventId": event_id,
                "date": event.get("date"),
                "name": event.get("name"),
                "summary": summary,
                "fetchedAt": datetime.utcnow().isoformat() + "Z",
            }
            records.append({
                "league": league,
                "eventId": event_id,
                "hash": hash_payload(payload),
                "payload": payload,
            })

    print(json.dumps(records))


if __name__ == "__main__":
    main()
