'use client';
import React from 'react';
import Link from 'next/link';
import {useTranslations} from 'next-intl';
import {Container} from 'react-bootstrap';
import type {IconType} from 'react-icons';
import {FaBuilding, FaCalendarAlt, FaGraduationCap, FaLink, FaStar} from 'react-icons/fa';
import type {ArticleLien} from '@/types/article';
import {annuaireEntreeHref} from '@/utils/annuaireEntreeHref';
import {ensembleEvenementHref} from '@/utils/ensembleEvenementHref';
import {evenementHref} from '@/utils/evenementHref';
import {stageHref} from '@/utils/stageHref';

interface ArticleLiensSectionProps {
  locale: string;
  liens: ArticleLien[];
}

/** La fiche de la base vers laquelle pointe un lien d'article ; l'entrée d'annuaire redirige d'elle-même vers artiste, groupe, ensemble ou fédération. */
export function lienHref(locale: string, lien: ArticleLien): string | null {
  switch (lien.tableCible) {
    case 'annuaire_entree':
      return annuaireEntreeHref(locale, lien.cibleId, lien.libelle);
    case 'evenement':
      return evenementHref(locale, lien.cibleId, lien.libelle);
    case 'evenement_ensemble':
      return ensembleEvenementHref(locale, lien.cibleId, lien.libelle);
    case 'formation_stage':
      return stageHref(locale, lien.cibleId, lien.libelle);
    default:
      return null;
  }
}

const ICONES: Record<string, IconType> = {
  annuaire_entree: FaBuilding,
  evenement: FaCalendarAlt,
  evenement_ensemble: FaStar,
  formation_stage: FaGraduationCap,
};

/** Fiches de la base accrochées à l'article en Kasour (spec L71), chacune menant à sa page. */
export default function ArticleLiensSection({locale, liens}: ArticleLiensSectionProps) {
  const t = useTranslations('ArticlesPage');
  const cibles = liens.map((lien) => ({lien, href: lienHref(locale, lien)})).filter((c) => c.href !== null);
  if (cibles.length === 0) return null;

  return (
    <section className="tk-article-liens" data-testid="article-liens">
      <Container>
        <div className="tk-article__wrap">
          <h2 className="tk-article-liens__title">
            <FaLink aria-hidden="true" /> {t('linked_items_title')}
          </h2>
          <ul className="tk-article-liens__liste">
            {cibles.map(({lien, href}) => {
              const Icone = ICONES[lien.tableCible] ?? FaLink;
              return (
                <li key={lien.id}>
                  <Link href={href as string} className="tk-article-liens__lien">
                    <Icone aria-hidden="true" />
                    <span>{lien.libelle}</span>
                  </Link>
                </li>
              );
            })}
          </ul>
        </div>
      </Container>
    </section>
  );
}
