// Getrennt von models/DocumentTemplate.ts, damit Client-Komponenten diese
// Konstanten importieren können, ohne Mongoose in den Browser-Bundle zu ziehen.
import type { Permission } from "@/lib/permissions";

export const DOCUMENT_CATEGORIES = [
  "arbeitsvertrag",
  "arbeitszeugnis",
  "ausbildungsvertrag",
  "ausbildungszeugnis",
  "abmahnung",
  "qm",
  "other",
] as const;
export type DocumentCategory = (typeof DOCUMENT_CATEGORIES)[number];

export const DOCUMENT_CATEGORY_LABELS: Record<DocumentCategory, string> = {
  arbeitsvertrag: "Arbeitsvertrag",
  arbeitszeugnis: "Arbeitszeugnis",
  ausbildungsvertrag: "Ausbildungsvertrag",
  ausbildungszeugnis: "Ausbildungszeugnis",
  // Personalsystem (24.09.2026) - eigene Kategorie statt eines separaten
  // Datenmodells: landet als generiertes Dokument in der Personalakte,
  // taucht dort automatisch in der bestehenden "Dokumente"-Liste auf (nach
  // Kategorie beschriftet) - ergibt die gewünschte Abmahnungs-Historie ganz
  // ohne neue Struktur, siehe project_rakku_v2_personalsystem.md.
  abmahnung: "Abmahnung",
  qm: "Qualitätsmanagement",
  other: "Sonstiges",
};

// Nicht jede Position soll jedes fertige Dokument sehen — Personalakten-Dokumente
// (Verträge, Zeugnisse) gehen an die Berechtigung "hr", QM-Dokumente an "qm",
// alles andere an die granulare "documents_*"-Berechtigung. Gilt für Vorlagen
// UND erstellte Dokumente gleichermaßen. "hr"/"qm" sind bewusst nicht weiter
// aufgeteilt (siehe lib/permissions.ts), deshalb ignorieren sie `action`.
const CATEGORY_BASE_PERMISSION: Record<DocumentCategory, "hr" | "qm" | "documents"> = {
  arbeitsvertrag: "hr",
  arbeitszeugnis: "hr",
  ausbildungsvertrag: "hr",
  ausbildungszeugnis: "hr",
  abmahnung: "hr",
  qm: "qm",
  other: "documents",
};

export function documentCategoryPermission(category: DocumentCategory, action: "view" | "create" | "edit" | "delete"): Permission {
  const base = CATEGORY_BASE_PERMISSION[category];
  return (base === "documents" ? `documents_${action}` : base) as Permission;
}

// Erkennt {{token}}-Platzhalter in einem Vorlagentext.
export function extractTokens(body: string): string[] {
  const matches = body.matchAll(/\{\{\s*([a-zA-Z0-9_]+)\s*\}\}/g);
  return [...new Set([...matches].map((m) => m[1]))];
}

// Füllt nur bekannte Platzhalter (z. B. aus dem Mitarbeiterprofil) vorab aus —
// unbekannte {{token}}-Platzhalter bleiben absichtlich stehen, damit sie im
// bearbeitbaren Dokumenttext auffallen und von Hand ersetzt werden können,
// statt lautlos leer zu werden.
export function fillTemplate(body: string, values: Record<string, string>): string {
  return body.replace(/\{\{\s*([a-zA-Z0-9_]+)\s*\}\}/g, (match, token) => (token in values ? values[token] : match));
}
