import { sourceBadge, sourceLabel } from "@/lib/keywords";
import { cn } from "@/lib/utils";

// Pastille de provenance (décision A5) : le carré de 16 px collé à une valeur, qui dit d'où
// elle vient sans coûter une colonne ni une ligne de plus. Neutre par construction — elle
// n'est pas une donnée, c'est une étiquette : un fond `muted` et une bordure `border`, jamais
// une couleur qui la ferait passer pour une information.
//
// Deux sources peuvent partager une initiale (Semrush et SE Ranking sont deux « S »). C'est
// assumé : le nom complet est dans l'infobulle de la cellule et dans le panneau de détail, la
// pastille n'a qu'à distinguer « ce chiffre a une provenance » de « il n'en a pas ».

/** Initiale affichée : la première lettre ou chiffre du nom court de la source. */
export function sourceInitial(source: string): string {
  const short = sourceBadge(source);
  const first = [...short].find((character) => /[\p{L}\p{N}]/u.test(character));
  return (first ?? "?").toUpperCase();
}

export function SourcePill({ source, className }: { source: string; className?: string }) {
  return (
    <span
      // Décorative : le nom de la source est déjà porté par le libellé accessible de la
      // cellule, qui liste toutes les observations. La répéter ferait doubler chaque valeur.
      aria-hidden="true"
      title={sourceLabel(source)}
      className={cn(
        "border-border bg-muted text-muted-foreground inline-flex size-4 shrink-0 items-center justify-center rounded-sm border font-mono text-xs leading-none",
        className,
      )}
    >
      {sourceInitial(source)}
    </span>
  );
}
