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

export interface IZiplineAttempt extends Document {
  user: mongoose.Types.ObjectId;
  puzzle: mongoose.Types.ObjectId;
  submittedSolution: any; // Store the user's submitted solution
  isCorrect: boolean;
  timeTaken: number; // in seconds
  attemptedAt: Date;
  startedAt: Date;
  completedAt: Date;
  progress: any; // Store current progress (e.g., path taken, numbers filled)
  score: number; // Calculated score based on performance
  status: 'IN_PROGRESS' | 'COMPLETED' | 'FAILED';
}

const ZiplineAttemptSchema: Schema = new Schema({
  user: { type: Schema.Types.ObjectId, ref: 'User', required: true },
  puzzle: { type: Schema.Types.ObjectId, ref: 'ZiplinePuzzle', required: true },
  submittedSolution: { type: Schema.Types.Mixed, required: false },
  isCorrect: { type: Boolean, required: false },
  timeTaken: { type: Number, required: false },
  attemptedAt: { type: Date, default: Date.now },
  startedAt: { type: Date },
  completedAt: { type: Date },
  progress: { type: Schema.Types.Mixed },
  score: { type: Number },
  status: {
    type: String,
    enum: ['IN_PROGRESS', 'COMPLETED', 'FAILED'],
    default: 'IN_PROGRESS',
  },
});

export default mongoose.model<IZiplineAttempt>('ZiplineAttempt', ZiplineAttemptSchema);
