"""Slide 4: forward-looking picks — top locked codes + indicator usage."""
from __future__ import annotations
from pathlib import Path

import matplotlib.pyplot as plt

from .style import BC_BLUE, BC_GRAY, apply_style, n_label
from .data import fetch_top_locked


def plot_top_locked_codes(shortqtr: str, out_dir: Path, top_n: int = 10) -> None:
    apply_style()
    rows = fetch_top_locked(shortqtr, top_n)
    if not rows:
        print("  no locked-code data")
        return

    fig, ax = plt.subplots(figsize=(10, 6))
    codes = [r["callreportcode"] for r in rows][::-1]
    counts = [r["count_true"] for r in rows][::-1]
    total = rows[0]["count_total"]

    ax.barh(codes, counts, color=BC_BLUE)
    for i, c in enumerate(counts):
        pct = 100.0 * c / total
        ax.text(c + 1, i, f"{c} banks ({pct:.0f}%)", va="center", fontsize=11, color=BC_GRAY)
    ax.set_xlabel("Banks with this call-report code locked")
    ax.set_title(f"Top {top_n} most-locked forward-looking indicators — {shortqtr.upper()}")
    ax.text(0.99, -0.1, n_label(total), transform=ax.transAxes, ha="right", fontsize=10, color=BC_GRAY)
    plt.tight_layout()
    out = out_dir / "04a-top-locked-codes.png"
    fig.savefig(out)
    plt.close(fig)
    print(f"  wrote {out}")
