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

export interface OrderFeedbackDoc {
  _id: string;
  orderId: mongoose.Types.ObjectId;
  clientId: mongoose.Types.ObjectId;
  clientName: string;
  shootingType: string;
  token: string;
  rating: number;
  comment: string;
  allowTestimonial: boolean;
  submitted: boolean;
  submittedAt: Date | null;
  usedForTestimonial: boolean;
  // Getrennt von usedForTestimonial — eine Bewertung ohne Kommentar kann nie
  // zu einer Kundenstimme (Zitat) werden, aber trotzdem als reine
  // Sterne-Bewertung ins öffentliche Durchschnitts-System einfließen.
  usedForQuickReview: boolean;
  sentAt: Date;
  createdAt: Date;
}

const orderFeedbackSchema = new Schema<OrderFeedbackDoc>(
  {
    orderId: { type: Schema.Types.ObjectId, ref: "Order", required: true, unique: true },
    clientId: { type: Schema.Types.ObjectId, ref: "Client", required: true },
    // Schnappschuss statt Live-Referenz — falls sich Name/Auftrag später ändern,
    // bleibt die Zuordnung in der Admin-Übersicht trotzdem lesbar.
    clientName: { type: String, default: "" },
    shootingType: { type: String, default: "" },
    token: { type: String, required: true, unique: true, index: true },
    rating: { type: Number, default: 0, min: 0, max: 5 },
    comment: { type: String, default: "", trim: true, maxlength: 1000 },
    allowTestimonial: { type: Boolean, default: false },
    submitted: { type: Boolean, default: false },
    submittedAt: { type: Date, default: null },
    usedForTestimonial: { type: Boolean, default: false },
    usedForQuickReview: { type: Boolean, default: false },
    sentAt: { type: Date, default: Date.now },
  },
  { timestamps: true }
);

export const OrderFeedback =
  (models.OrderFeedback as mongoose.Model<OrderFeedbackDoc>) ||
  model<OrderFeedbackDoc>("OrderFeedback", orderFeedbackSchema);
