from datetime import date
import json
from pathlib import Path

from portmadness.config import Config
from portmadness.data_loader import load_movements, load_participants, load_picks, load_results
from portmadness.penalty_engine import calculate_penalties

BASE_PATH = Path(__file__).resolve().parents[1]
DATA_PATH = BASE_PATH / "data"


def test_penalty_totals_match_fixture():
    participants = load_participants(DATA_PATH / "participants.csv")
    picks = load_picks(DATA_PATH / "picks.csv")
    results = load_results(DATA_PATH / "game_results.csv")
    movements = load_movements(DATA_PATH / "movements.json")

    cfg = Config()
    penalties = calculate_penalties(picks, results, movements, cfg, date(2026, 3, 23))

    totals = {pid: 0 for pid in participants.keys()}
    for penalty in penalties:
        totals[penalty.participant_id] += penalty.total_reps

    non_zero = {pid: reps for pid, reps in totals.items() if reps}
    fixture_path = BASE_PATH / "tests" / "fixtures" / "sample_scenario.json"
    expected = json.loads(fixture_path.read_text(encoding="utf-8"))["expected_totals"]
    assert non_zero == expected
