import mongoose, { Schema, models, model } from "mongoose";

// Ein Dokument pro Vertragstyp (Singleton, wie Settings) — enthält die
// bearbeitbaren Fließtext-Abschnitte, die in contractPdf.tsx zwischen den
// aus den Auftragsdaten erzeugten Angaben (Parteien, Preis, Termin,
// Nutzungsrechte-Auswahl usw. — die bleiben immer datengetrieben) und dem
// Unterschriftenblock eingefügt werden. So kann Formulierungen/Klauseln
// ändern, ohne dass Code angefasst werden muss.
export interface ContractTemplateSection {
  heading: string;
  // Freitext, Absätze durch eine Leerzeile getrennt (wie bei Order.description).
  body: string;
  // Englische Fassung (zweisprachige Verträge, 28.09.2026) — bewusst als
  // optionale Felder AN DERSELBEN Section statt eines komplett getrennten
  // englischen Abschnitts-Arrays: so bleiben Reihenfolge und Anzahl der
  // Abschnitte zwischen beiden Sprachen automatisch synchron (keine Gefahr,
  // dass DE und EN strukturell auseinanderlaufen). Leer = noch nicht
  // übersetzt — beim PDF-Rendern fällt das dann auf die deutsche Fassung
  // zurück (siehe lib/contractPdf.tsx resolveSectionsForLocale).
  headingEn?: string;
  bodyEn?: string;
  // Anhang-Abschnitte (z. B. AGB) werden NACH dem Unterschriftenblock und auf
  // einer eigenen neuen Seite gerendert, statt zwischen den nummerierten
  // Vertragsklauseln zu stehen — siehe contractPdf.tsx.
  appendix?: boolean;
}

export type ContractTemplateType = "standard" | "tfp";

export interface ContractTemplateDoc {
  _id: string;
  type: ContractTemplateType;
  sections: ContractTemplateSection[];
  updatedAt: Date;
}

const contractTemplateSectionSchema = new Schema<ContractTemplateSection>(
  {
    heading: { type: String, required: true, trim: true, maxlength: 150 },
    body: { type: String, default: "", trim: true },
    headingEn: { type: String, default: "", trim: true, maxlength: 150 },
    bodyEn: { type: String, default: "", trim: true },
    appendix: { type: Boolean, default: false },
  },
  { _id: false }
);

const contractTemplateSchema = new Schema<ContractTemplateDoc>(
  {
    type: { type: String, enum: ["standard", "tfp"], required: true, unique: true },
    sections: { type: [contractTemplateSectionSchema], default: [] },
  },
  { timestamps: { createdAt: false, updatedAt: true } }
);

export const ContractTemplate =
  (models.ContractTemplate as mongoose.Model<ContractTemplateDoc>) ||
  model<ContractTemplateDoc>("ContractTemplate", contractTemplateSchema);
