"""Re-render the reported held-out comparison, without fitting a classifier."""
import html
import json
from pathlib import Path

ROOT = Path(__file__).resolve().parent if "__file__" in globals() else Path.cwd()
METRICS = ("auc", "precision", "f1", "brier")


def reproduce():
    rows = json.loads((ROOT / "source.json").read_text(encoding="utf-8"))
    assert len(rows) == 4 and len({row["name"] for row in rows}) == 4
    for row in rows:
        assert all(0 <= row[metric] <= 1 for metric in METRICS)
    winners = {}
    for metric in METRICS:
        best = (min if metric == "brier" else max)(row[metric] for row in rows)
        winners[metric] = [row["name"] for row in rows if row[metric] == best]
    fca = next(row for row in rows if row["name"] == "FCA model")
    return rows, {"rows": len(rows), "winners": winners,
                  "fca": {metric: fca[metric] for metric in METRICS}}


def render_table(rows):
    svg = ['<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 760 1080" role="img">',
           '<title>Published FCA benchmark, Table 1 re-rendered</title>',
           '<rect width="760" height="1080" fill="#f7f8f2"/>',
           '<g font-family="Arial,sans-serif" fill="#23383a">',
           '<text x="30" y="35" font-size="21">Published held-out comparison</text>',
           '<text x="30" y="62" font-size="14">DOI: 10.1177/14604582261444612 · Table 1 · common scale 0–1</text>']
    for index, metric in enumerate(METRICS):
        top = 110 + index * 230
        direction = "lower is better" if metric == "brier" else "higher is better"
        svg.append(f'<text x="30" y="{top}" font-size="18">{metric.upper()} · {direction}</text>')
        for i, row in enumerate(rows):
            y, value = top + 35 + i * 42, row[metric]
            name = html.escape(row["name"])
            svg.extend([f'<text x="30" y="{y+13}" font-size="14">{name}</text>',
                        f'<rect x="220" y="{y}" width="400" height="16" fill="#e0e6e0"/>',
                        f'<rect x="220" y="{y}" width="{value*400}" height="16" fill="#14655f"/>',
                        f'<text x="640" y="{y+13}" font-size="14">{value:.4f}</text>'])
    svg.extend(['<text x="30" y="1050" font-size="14">Reported numbers re-rendered. No model refit or patient-level reproduction.</text>', '</g></svg>'])
    (ROOT / "figure.svg").write_text("\n".join(svg), encoding="utf-8")


if __name__ == "__main__":
    rows, result = reproduce()
    expected = json.loads((ROOT / "expected.json").read_text(encoding="utf-8"))
    assert result == expected, (result, expected)
    render_table(rows)
    print(json.dumps(result, indent=2))
    print("PASS: Table 1 checked and re-rendered to figure.svg; no model refit.")
