import { notFound } from "next/navigation";
import { templateService } from "@/modules/templates";
import { moduleService } from "@/modules/modules";
import { advanceFolderService } from "@/modules/advance-modules";
import { PREBUILT_MODULES } from "@/modules/modules/module-catalog";
import {
  TemplateBuilder,
  type TemplateModuleMeta,
  type TemplateAdvanceFolderMeta,
} from "@/components/admin/TemplateBuilder";
import { requireAdmin } from "@/modules/auth";

export const dynamic = "force-dynamic";
export const metadata = { title: "Edit template · Admin" };

export default async function EditTemplatePage({
  params,
}: {
  params: Promise<{ templateId: string }>;
}) {
  await requireAdmin();
  const { templateId } = await params;
  const [template, activeModules, activeFolders] = await Promise.all([
    templateService.findById(templateId),
    moduleService.listActive(),
    advanceFolderService.listActive(),
  ]);
  if (!template) notFound();
  const implicitSlugs = new Set(
    PREBUILT_MODULES.filter((m) => m.implicit).map((m) => m.slug),
  );
  const moduleLibrary: TemplateModuleMeta[] = activeModules.map((m) => ({
    id: m.id,
    slug: m.slug,
    name: m.name,
    description: m.description,
    icon: m.icon,
    category: m.category,
    implicit: implicitSlugs.has(m.slug),
  }));
  const advanceFolderLibrary: TemplateAdvanceFolderMeta[] = activeFolders.map(
    (f) => ({
      id: f.id,
      slug: f.slug,
      name: f.name,
      description: f.description,
    }),
  );
  return (
    <TemplateBuilder
      templateId={template.id}
      initial={template as never}
      moduleLibrary={moduleLibrary}
      advanceFolderLibrary={advanceFolderLibrary}
    />
  );
}
