import { connectDB } from "@/lib/db";
import { DocumentTemplate } from "@/models/DocumentTemplate";
import { GeneratedDocument } from "@/models/GeneratedDocument";
import { Client } from "@/models/Client";
import { DOCUMENT_CATEGORIES, documentCategoryPermission, type DocumentCategory } from "@/lib/documentConstants";
import { hasPermission } from "@/lib/adminAuth";

// Extrahiert aus admin/documents/page.tsx — Platzhalter-Autofill aus dem
// Mitarbeiterprofil (das GenerateDocumentPanel macht das client-seitig auf
// der Webseite) bleibt hier bewusst weg: die App lädt den rohen Vorlagentext
// zum freien Bearbeiten, ohne die Substitutions-Logik zu duplizieren.
export async function getDocumentsData() {
  const visibleCategories: DocumentCategory[] = [];
  for (const cat of DOCUMENT_CATEGORIES) {
    if (await hasPermission(documentCategoryPermission(cat, "view"))) visibleCategories.push(cat);
  }
  if (visibleCategories.length === 0) return null;

  await connectDB();
  const [templatesAll, generatedAll, staff] = await Promise.all([
    DocumentTemplate.find({ category: { $in: visibleCategories } }).sort({ sortOrder: 1 }).lean(),
    GeneratedDocument.find({ category: { $in: visibleCategories } }).sort({ createdAt: -1 }).limit(200).lean(),
    Client.find({ role: "staff" }).select("name").sort({ name: 1 }).lean(),
  ]);

  return {
    visibleCategories,
    templates: templatesAll.map((t) => ({
      _id: String(t._id),
      name: t.name,
      category: t.category,
      body: t.body,
      defaultIncludeLetterhead: t.defaultIncludeLetterhead,
      defaultIncludeFooter: t.defaultIncludeFooter,
      defaultFooterText: t.defaultFooterText,
      defaultIncludeRecipientAddress: t.defaultIncludeRecipientAddress,
    })),
    generated: generatedAll.map((g) => ({
      _id: String(g._id),
      templateName: g.templateName,
      category: g.category,
      clientName: g.clientName,
      renderedBody: g.renderedBody,
      includeLetterhead: g.includeLetterhead,
      includeFooter: g.includeFooter,
      footerText: g.footerText,
      includeRecipientAddress: g.includeRecipientAddress,
      recipientAddress: g.recipientAddress,
      createdAt: new Date(g.createdAt).toISOString(),
      signature: g.signature ? { name: g.signature.name, signedAt: new Date(g.signature.signedAt).toISOString(), ip: g.signature.ip } : null,
    })),
    staff: staff.map((s) => ({ _id: String(s._id), name: s.name })),
  };
}
