import { notFound } from 'next/navigation';
import { getPublicModulePage } from './registry.js';

/**
 * Composant serveur RSC catch-all pour `/zen/<module>/<...>`.
 *
 * Next.js route ce composant via un segment `[...path]`. Le premier segment
 * identifie le module ; le reste est passé au composant enregistré qui fait
 * son propre routage interne.
 *
 * `/zen/api/...` est intercepté en amont par la route API (`route.js`) qui
 * est plus spécifique pour Next.js — ce composant ne le verra jamais en
 * pratique, mais on garde le filtre par sûreté.
 */
export default async function PublicModulePage({ params }) {
  const resolved = await params;
  const path = Array.isArray(resolved?.path) ? resolved.path : [];

  if (path.length === 0) notFound();
  const [moduleName, ...rest] = path;
  if (moduleName === 'api') notFound();

  const entry = getPublicModulePage(moduleName);
  if (!entry) notFound();

  const { Component } = entry;
  return <Component params={resolved} segments={rest} />;
}
