#!/bin/bash
# Fetches live data from SportsGameOdds API and writes demo-data.json
# Run daily via cron: 0 9 * * * /var/www/html/sportsclaw-guru/scripts/update-demo-data.sh

set -euo pipefail

SGO_API_KEY="47d6ce020d896ece307a284e8c78ff7f"
SGO_BASE="https://api.sportsgameodds.com/v2"
OUT="/var/www/html/sportsclaw-guru/public/demo/demo-data.json"
TMP="${OUT}.tmp"
CACHE_DIR="/tmp/sportsclaw-demo-cache"

mkdir -p "$CACHE_DIR"

# Fetch API data with curl, save to temp files
curl -sf "${SGO_BASE}/events?leagueID=NBA&oddsAvailable=true&limit=10" \
  -H "x-api-key: ${SGO_API_KEY}" > "${CACHE_DIR}/nba.json" 2>/dev/null || echo '{}' > "${CACHE_DIR}/nba.json"

curl -sf "${SGO_BASE}/events?leagueID=NFL&oddsAvailable=true&limit=8" \
  -H "x-api-key: ${SGO_API_KEY}" > "${CACHE_DIR}/nfl.json" 2>/dev/null || echo '{}' > "${CACHE_DIR}/nfl.json"

python3 - "$CACHE_DIR" "$OUT" "$TMP" <<'PYEOF'
import json, sys, os
from datetime import datetime, timezone

CACHE_DIR = sys.argv[1]
OUT = sys.argv[2]
TMP = sys.argv[3]

def load(name):
    path = os.path.join(CACHE_DIR, name)
    try:
        with open(path) as f:
            return json.load(f)
    except:
        return {}

def fmt_time(iso):
    if not iso:
        return "TBD"
    try:
        dt = datetime.fromisoformat(iso.replace("Z", "+00:00"))
        return dt.strftime("%a %-I:%M %p") + " ET"
    except:
        return "TBD"

def fmt_odds(val):
    if not val or val == "-":
        return "-"
    return str(val)

# ---- NBA ----
nba_raw = load("nba.json")
nba_events = nba_raw.get("data", [])
upcoming = [e for e in nba_events if not e.get("status", {}).get("completed")]
if not upcoming:
    upcoming = nba_events[:5]

nba_card = None
first_home_medium = "tonight"
chosen_player = None

for e in upcoming[:5]:
    home = e["teams"]["home"]["names"]
    away = e["teams"]["away"]["names"]
    odds = e.get("odds", {})
    status = e.get("status", {})

    ml_home = odds.get("points-home-game-ml-home", {}).get("fairOdds", "-")
    ml_away = odds.get("points-away-game-ml-away", {}).get("fairOdds", "-")
    sp_home = odds.get("points-home-game-sp-home", {}).get("fairSpread", "-")
    ou_data = odds.get("points-all-game-ou-over", {})
    ou = ou_data.get("fairOverUnder") or ou_data.get("bookOverUnder") or "-"

    if nba_card is None:
        first_home_medium = home["medium"].lower()
        nba_card = {
            "emoji": "\U0001F3C0",
            "title": f"{away['short']} @ {home['medium']} - {fmt_time(status.get('startsAt'))}",
            "lines": [
                f"ML: {fmt_odds(ml_away)} / {fmt_odds(ml_home)}",
                f"Spread: {home['short']} {fmt_odds(sp_home)}",
                f"O/U: {ou}",
            ]
        }

# NBA spreads card
nba_spreads = []
for e in upcoming[:4]:
    home = e["teams"]["home"]["names"]
    away = e["teams"]["away"]["names"]
    odds = e.get("odds", {})
    sp_home = odds.get("points-home-game-sp-home", {}).get("fairSpread", "-")
    nba_spreads.append(f"{away['short']} @ {home['short']} ({home['short']} {fmt_odds(sp_home)})")

nba_spreads_card = {
    "emoji": "\U0001F3C0",
    "title": "NBA Lines - Today",
    "lines": nba_spreads if nba_spreads else ["No NBA games today"]
}

# Player props from first event
prop_card = None
if upcoming:
    first_event = upcoming[0]
    odds = first_event.get("odds", {})

    player_props = {}
    for k, v in odds.items():
        if k.startswith("points-") and "-game-ou-over" in k and k != "points-all-game-ou-over":
            parts = k.split("-")
            if len(parts) >= 4:
                player_id = parts[1]
                player_name = player_id.replace("_NBA", "").replace("_NFL", "").replace("_MLB", "").replace("_NHL", "")
                # Remove trailing _1, _2 etc
                while player_name and player_name[-1].isdigit():
                    player_name = player_name.rsplit("_", 1)[0]
                player_name = player_name.replace("_", " ").title()
                line = v.get("fairOverUnder") or v.get("bookOverUnder") or "-"
                over_odds = v.get("fairOdds") or v.get("bookOdds") or "-"
                under_key = k.replace("-over", "-under")
                under_v = odds.get(under_key, {})
                under_odds = under_v.get("fairOdds") or under_v.get("bookOdds") or "-"
                player_props[player_name] = {
                    "line": line,
                    "over": over_odds,
                    "under": under_odds
                }

    # Pick a player (prefer one with a real line)
    for name, data in sorted(player_props.items()):
        if data["line"] != "-":
            chosen_player = name
            prop_card = {
                "emoji": "\U0001F4CA",
                "title": f"{name} - Points",
                "lines": [
                    f"Line: {data['line']}",
                    f"Over: {data['over']} | Under: {data['under']}",
                ]
            }
            break

# ---- NFL ----
nfl_raw = load("nfl.json")
nfl_events = nfl_raw.get("data", [])
nfl_upcoming = [e for e in nfl_events if not e.get("status", {}).get("completed")]

nfl_card = None
if nfl_upcoming:
    nfl_lines = []
    for e in nfl_upcoming[:4]:
        home = e["teams"]["home"]["names"]
        away = e["teams"]["away"]["names"]
        odds = e.get("odds", {})
        sp_home = odds.get("points-home-game-sp-home", {}).get("fairSpread", "-")
        nfl_lines.append(f"{away['short']} @ {home['short']} ({home['short']} {fmt_odds(sp_home)})")
    nfl_card = {
        "emoji": "\U0001F3C8",
        "title": "NFL Spreads",
        "lines": nfl_lines if nfl_lines else ["No games available"]
    }

if not nfl_card:
    nfl_card = {
        "emoji": "\U0001F3C8",
        "title": "NFL - Offseason",
        "lines": [
            "No NFL games currently scheduled.",
            "Check back during the season!",
            "Try: nba odds, mlb odds"
        ]
    }

# Build chip labels
chip_player_label = "player props"
if chosen_player:
    last_name = chosen_player.split()[-1].lower()
    chip_player_label = f"{last_name} points prop"

result = {
    "generated": datetime.now(timezone.utc).isoformat(),
    "nba_odds": nba_card or {"emoji": "\U0001F3C0", "title": "NBA Odds", "lines": ["No games available right now."]},
    "player_prop": prop_card or {"emoji": "\U0001F4CA", "title": "Player Props", "lines": ["No props available right now."]},
    "nfl_spreads": nfl_card,
    "nba_spreads": nba_spreads_card,
    "chips": {
        "nba_odds": f"nba odds {first_home_medium}",
        "player_prop": chip_player_label,
        "nfl_spreads": "nfl spreads"
    }
}

with open(TMP, "w") as f:
    json.dump(result, f, indent=2)

os.rename(TMP, OUT)
print(f"OK: wrote {OUT}")
PYEOF
