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

export interface TestimonialDoc {
  _id: string;
  authorName: string;
  // Echter Name, optional — steht auf der Startseite VOR dem authorName in
  // Anführungszeichen (z. B. Max „Zoneks"), etwa bei Cosplay-Handles statt
  // Klarnamen. Leer = nur authorName wird angezeigt (bisheriges Verhalten).
  realName: string;
  quote: string;
  quoteEn: string;
  // Freitext-Kontext, z. B. "Cosplay Shooting" oder "Convention-Fotografie" —
  // rein informativ, keine Verknüpfung zu einem echten Auftrag.
  context: string;
  contextEn: string;
  // Rundes Profilbild — Empfehlung im Admin-Formular: entweder ein Bild der
  // Kundin/des Kunden selbst oder eines der beim Shooting entstandenen Fotos.
  imagePath: string;
  // "google" = von Rakku manuell von einer echten Google-Bewertung übertragen
  // (kein Live-API-Zugriff vorhanden, siehe reviewUrl) — im Admin-Bereich ein
  // eigener Reiter, auf der Startseite mit Sterne-Bewertung + Google-Hinweis
  // statt Profilbild. "manual" = ganz normale, von Rakku eingetragene
  // Kundenstimme (bisheriges Verhalten, unverändert).
  source: "manual" | "google";
  // Nur bei source "google" gesetzt (1–5) — bei "manual" bewusst 0/ungesetzt,
  // da eigene Kundenstimmen bislang keine Sternebewertung haben.
  rating: number;
  // Link zur echten Google-Bewertung, für Transparenz/Nachprüfbarkeit.
  reviewUrl: string;
  visible: boolean;
  sortOrder: number;
  createdAt: Date;
  updatedAt: Date;
}

const testimonialSchema = new Schema<TestimonialDoc>(
  {
    authorName: { type: String, required: true, trim: true, maxlength: 100 },
    realName: { type: String, default: "", trim: true, maxlength: 100 },
    quote: { type: String, required: true, trim: true, maxlength: 600 },
    quoteEn: { type: String, default: "", trim: true, maxlength: 600 },
    context: { type: String, default: "", trim: true, maxlength: 100 },
    contextEn: { type: String, default: "", trim: true, maxlength: 100 },
    imagePath: { type: String, default: "" },
    source: { type: String, enum: ["manual", "google"], default: "manual" },
    rating: { type: Number, default: 0, min: 0, max: 5 },
    reviewUrl: { type: String, default: "", trim: true, maxlength: 500 },
    visible: { type: Boolean, default: true },
    sortOrder: { type: Number, default: 0 },
  },
  { timestamps: true }
);

export const Testimonial =
  (models.Testimonial as mongoose.Model<TestimonialDoc>) || model<TestimonialDoc>("Testimonial", testimonialSchema);
