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

export interface WaitlistEntryDoc {
  _id: string;
  conventionId: mongoose.Types.ObjectId;
  // Warteliste braucht jetzt ein Konto (statt freier Name/E-Mail-Eingabe) —
  // Name/E-Mail kommen live vom Client-Dokument, nicht mehr dupliziert
  // gespeichert, und der Kunde sieht seinen Eintrag im eigenen Profil.
  clientId: mongoose.Types.ObjectId;
  message: string;
  notified: boolean;
  notifiedAt: Date | null;
  // Gesetzt, sobald Staff den Eintrag genehmigt und daraus einen Auftrag
  // erstellt (grantWaitlistEntryAction) — zugleich das "genehmigt"-Flag.
  // Der Kunde legt NICHT selbst einen Auftrag an; der Termin (Datum + exakte
  // Uhrzeit) wird beim Genehmigen im Admin festgelegt.
  orderId: mongoose.Types.ObjectId | null;
  createdAt: Date;
}

const waitlistEntrySchema = new Schema<WaitlistEntryDoc>(
  {
    conventionId: { type: Schema.Types.ObjectId, ref: "Convention", required: true, index: true },
    clientId: { type: Schema.Types.ObjectId, ref: "Client", required: true, index: true },
    message: { type: String, default: "", trim: true, maxlength: 500 },
    notified: { type: Boolean, default: false },
    notifiedAt: { type: Date, default: null },
    orderId: { type: Schema.Types.ObjectId, ref: "Order", default: null },
  },
  { timestamps: true }
);

waitlistEntrySchema.index({ conventionId: 1, clientId: 1 }, { unique: true });

export const WaitlistEntry =
  (models.WaitlistEntry as mongoose.Model<WaitlistEntryDoc>) ||
  model<WaitlistEntryDoc>("WaitlistEntry", waitlistEntrySchema);
