import mongoose, { Document, Schema } from 'mongoose';

export interface IAnswer {
  question: mongoose.Types.ObjectId;
  selected_option: string;
  is_correct: boolean;
  points_earned: number;
}

export interface IQuizResultDocument extends Document {
  quiz: mongoose.Types.ObjectId;
  user: mongoose.Types.ObjectId;
  answers: IAnswer[];
  score: number;
  total_points: number;
  submitted_at: Date;
  createdAt: Date;
  updatedAt: Date;
}

const quizResultSchema = new Schema<IQuizResultDocument>(
  {
    quiz: { type: Schema.Types.ObjectId, ref: 'Quiz', required: true },
    user: { type: Schema.Types.ObjectId, ref: 'User', required: true },
    answers: [
      {
        question: { type: Schema.Types.ObjectId, ref: 'Question', required: true },
        selected_option: { type: String, required: true },
        is_correct: { type: Boolean, required: true },
        points_earned: { type: Number, required: true },
      },
    ],
    score: { type: Number, required: true },
    total_points: { type: Number, required: true },
    submitted_at: { type: Date, default: Date.now },
  },
  { timestamps: true },
);

quizResultSchema.index({ quiz: 1, user: 1 }, { unique: true });

export default mongoose.model<IQuizResultDocument>('QuizResult', quizResultSchema);
