"""
Aggiornamento notturno: risultati + quote closing + xG della stagione corrente,
poi regolamento di daily_picks e scoring di tipster e agenti.

Calcola da solo i codici stagione correnti (a luglio 2026 -> '2526' e '2627').

Uso (pensato per lo scheduler, ~03:30):
    python scripts/update_results.py
"""

import subprocess
import sys
from datetime import date
from pathlib import Path

import pandas as pd
import pymysql

SCRIPTS = Path(__file__).resolve().parent
sys.path.insert(0, str(SCRIPTS))
import config
from score_tipsters import settle


def run(script: str, *extra) -> None:
    print(f"\n--- {script} {' '.join(extra)} ---", flush=True)
    subprocess.run([sys.executable, str(SCRIPTS / script), *extra], timeout=1800)


def settle_daily_picks() -> None:
    conn = pymysql.connect(host=config.DB["host"], port=config.DB["port"],
                           user=config.DB["user"], password=config.DB["password"],
                           database="tigertips")
    cur = conn.cursor()
    df = pd.read_sql("""
        SELECT dp.id, dp.market, dp.selection, dp.line,
               m.home_goals AS hg, m.away_goals AS ag
        FROM daily_picks dp
        JOIN matches m ON m.id = dp.match_id
        WHERE dp.outcome = 'unsettled' AND m.result IS NOT NULL
    """, conn)
    if df.empty:
        print("daily_picks: nulla da regolare")
        conn.close()
        return
    for c in ("line", "hg", "ag"):
        df[c] = pd.to_numeric(df[c], errors="coerce")
    df["new_outcome"] = df.apply(settle, axis=1)
    done = df.dropna(subset=["new_outcome"])
    for r in done.itertuples(index=False):
        cur.execute("UPDATE daily_picks SET outcome = %s WHERE id = %s",
                    (r.new_outcome, int(r.id)))
    conn.commit()
    conn.close()
    print(f"daily_picks regolate: {len(done)}")


def main() -> int:
    today = date.today()
    start_year = today.year if today.month >= 7 else today.year - 1
    seasons_fd = [f"{str(start_year - 1)[2:]}{str(start_year)[2:]}",
                  f"{str(start_year)[2:]}{str(start_year + 1)[2:]}"]
    season_us = str(start_year)

    run("download_data.py", "--seasons", *seasons_fd, "--force")
    run("import_db.py")
    run("download_xg.py", "--seasons", season_us, "--force")
    run("import_xg.py")
    print("\n--- regolamento daily_picks ---", flush=True)
    settle_daily_picks()
    run("score_tipsters.py")
    run("score_signals.py")
    return 0


if __name__ == "__main__":
    sys.exit(main())
