"""Slide 7: what shifted this quarter vs the prior one."""
from __future__ import annotations
from pathlib import Path

import matplotlib.pyplot as plt

from .style import BC_BLUE, BC_GRAY, BC_GREEN, BC_RED, apply_style
from .data import fetch_bank_metric


TRACKED_METRICS = ["lookback", "lookforward", "prepay", "floor_bps", "peer_percentage"]


def plot_what_changed(shortqtr: str, compare_shortqtr: str, out_dir: Path) -> None:
    apply_style()

    rows = []
    for m in TRACKED_METRICS:
        now = fetch_bank_metric(shortqtr, m)
        prev = fetch_bank_metric(compare_shortqtr, m)
        if now is None or prev is None or not now["p50"] or not prev["p50"]:
            continue
        rows.append({
            "metric": m,
            "now": float(now["p50"]),
            "prev": float(prev["p50"]),
            "delta": float(now["p50"]) - float(prev["p50"]),
        })

    if not rows:
        print("  no comparison data")
        return

    rows.sort(key=lambda r: abs(r["delta"]), reverse=True)
    rows = rows[:6]

    fig, ax = plt.subplots(figsize=(10, 5))
    names = [r["metric"] for r in rows][::-1]
    deltas = [r["delta"] for r in rows][::-1]
    colors = [BC_GREEN if d > 0 else BC_RED for d in deltas]
    ax.barh(names, deltas, color=colors)
    for i, (r, d) in enumerate(zip(rows[::-1], deltas)):
        ax.text(d, i, f"  {r['prev']:.2f} → {r['now']:.2f}", va="center", fontsize=11, color=BC_GRAY)
    ax.axvline(0, color=BC_GRAY, linewidth=1)
    ax.set_xlabel(f"Change in median ({compare_shortqtr.upper()} → {shortqtr.upper()})")
    ax.set_title(f"What shifted this quarter")
    plt.tight_layout()
    out = out_dir / "07-what-changed.png"
    fig.savefig(out)
    plt.close(fig)
    print(f"  wrote {out}")
