// Micara — registre d'icônes du thème (Astryx)
// Remplace les SVG de fallback d'Astryx (stroke 1.5, viewBox 24) par
// @heroicons/react version MINI (20×20, solid) — https://heroicons.com/mini
// Le registre est passé à defineTheme({ icons }) → toute résolution de nom
// sémantique (mode string de <Icon icon="…">) rend une icône heroicons mini,
// y compris les icônes INTERNES d'Astryx (chevrons de pagination de table,
// funnel des filtres PowerSearch, X des Dialog, loupe de recherche…).
// Les clés propres à l'app (dashboard, accounts, logout…) passent par le même
// mécanisme (getIcon résout n'importe quelle clé dans le registre du thème).
//
// Taille : chaque icône reçoit width/height="1em" → suit la taille du span
// Astryx (xsm 12 / sm 16 / md 20 / lg 24) ; fill=currentColor → suit la
// couleur sémantique (--color-icon-*).
import {
  ArrowDownIcon,
  ArrowDownTrayIcon,
  ArrowLeftStartOnRectangleIcon,
  ArrowTopRightOnSquareIcon,
  ArrowUpIcon,
  ArrowsUpDownIcon,
  Bars3Icon,
  CalendarDaysIcon,
  ChartBarIcon,
  CheckBadgeIcon,
  CheckCircleIcon,
  CheckIcon,
  ChevronDoubleLeftIcon,
  ChevronDoubleRightIcon,
  ChevronDownIcon,
  ChevronLeftIcon,
  ChevronRightIcon,
  ClipboardIcon,
  ClockIcon,
  EllipsisHorizontalIcon,
  ExclamationTriangleIcon,
  EyeSlashIcon,
  FunnelIcon,
  InformationCircleIcon,
  MagnifyingGlassIcon,
  MicrophoneIcon,
  PhoneXMarkIcon,
  QrCodeIcon,
  SignalIcon,
  SpeakerWaveIcon,
  SpeakerXMarkIcon,
  Squares2X2Icon,
  StopIcon,
  SwatchIcon,
  UsersIcon,
  VideoCameraIcon,
  ViewColumnsIcon,
  WrenchScrewdriverIcon,
  XCircleIcon,
  XMarkIcon,
} from '@heroicons/react/20/solid';

// nom sémantique → composant heroicons mini (20×20 solid)
const MINI = {
  // --- noms internes Astryx : remplacent les fallback SVG du package ---
  close: XMarkIcon,
  chevronDown: ChevronDownIcon,
  chevronLeft: ChevronLeftIcon,
  chevronRight: ChevronRightIcon,
  chevronsLeft: ChevronDoubleLeftIcon, // heroicons 2.2 : renommées chevron-double
  chevronsRight: ChevronDoubleRightIcon,
  check: CheckIcon,
  success: CheckCircleIcon,
  error: XCircleIcon,
  warning: ExclamationTriangleIcon,
  info: InformationCircleIcon,
  calendar: CalendarDaysIcon,
  clock: ClockIcon,
  externalLink: ArrowTopRightOnSquareIcon,
  menu: Bars3Icon,
  moreHorizontal: EllipsisHorizontalIcon,
  search: MagnifyingGlassIcon,
  arrowUp: ArrowUpIcon,
  arrowDown: ArrowDownIcon,
  arrowsUpDown: ArrowsUpDownIcon,
  funnel: FunnelIcon,
  eyeSlash: EyeSlashIcon,
  viewColumns: ViewColumnsIcon,
  copy: ClipboardIcon,
  checkDouble: CheckBadgeIcon,
  wrench: WrenchScrewdriverIcon,
  stop: StopIcon,
  microphone: MicrophoneIcon,
  // --- dashboard client (lot B) : QR, participants, terminer la réunion ---
  // pas de MicrophoneSlashIcon dans heroicons 2.2 → SpeakerXMark/Wave pour
  // l'état micro coupé / actif (sémantique son coupé, cohérente)
  muted: SpeakerXMarkIcon,
  unmuted: SpeakerWaveIcon,
  download: ArrowDownTrayIcon,
  qrcode: QrCodeIcon,
  endCall: PhoneXMarkIcon,
  meeting: VideoCameraIcon,
  // --- clés sémantiques de l'app (SideNav /admin + usages futurs) ---
  dashboard: Squares2X2Icon,
  accounts: UsersIcon,
  // pas d'ActivityIcon en heroicons mini → SignalIcon (pulsations), le plus proche
  live: SignalIcon,
  stats: ChartBarIcon,
  theme: SwatchIcon,
  // ex-ArrowRightOnRectangleIcon (nom heroicons v1, retiré en 2.x)
  logout: ArrowLeftStartOnRectangleIcon,
  users: UsersIcon,
  activity: SignalIcon,
  palette: SwatchIcon,
  checkCircle: CheckCircleIcon,
};

// Instanciées une fois au chargement (comme defaultIcons d'Astryx).
export const ICON_REGISTRY = Object.fromEntries(
  Object.entries(MINI).map(([name, C]) => [
    name,
    <C key={name} width="1em" height="1em" />,
  ]),
);
