# /// script
# requires-python = "==3.12.*"
# dependencies = ["matplotlib"]
# ///
"""Generate fingerprint bar chart: phi_1 through phi_5 for a sample."""

import sys
from pathlib import Path

import matplotlib.pyplot as plt

sys.path.insert(0, str(Path(__file__).resolve().parents[1]))
from figure_quality import configure_matplotlib, figure_output_path, validate_figure

configure_matplotlib()

# From the basic example: counts = [5, 4, 3, 2, 2, 1, 1, 1]
# phi_1=3 (species seen once), phi_2=2, phi_3=1, phi_4=1, phi_5=1
phis = [3, 2, 1, 1, 1]
labels = [
    "$\\phi_1$\nsingletons",
    "$\\phi_2$\ndoubletons",
    "$\\phi_3$",
    "$\\phi_4$",
    "$\\phi_5$",
]

fig, ax = plt.subplots(figsize=(5.5, 3.2))
ax.set_facecolor("#ffffff")
fig.patch.set_facecolor("#ffffff")

bars = ax.bar(range(len(phis)), phis, color="#4477aa", edgecolor="#335588", width=0.6)

# Annotate counts
for bar, val in zip(bars, phis):
    ax.text(
        bar.get_x() + bar.get_width() / 2,
        bar.get_height() + 0.08,
        str(val),
        ha="center",
        va="bottom",
        fontsize=11,
        color="#333333",
    )

ax.set_xticks(range(len(phis)))
ax.set_xticklabels(labels, fontsize=11)
ax.set_ylabel("Number of species", fontsize=12)
ax.set_ylim(0, 4)
ax.set_yticks([0, 1, 2, 3])
ax.spines["top"].set_visible(False)
ax.spines["right"].set_visible(False)
ax.tick_params(labelsize=10)

fig.tight_layout()
validate_figure(fig)
out = figure_output_path(__file__, "fingerprint.png")
fig.savefig(out, dpi=300, bbox_inches="tight", facecolor="white")
print(f"Saved to {out}")
