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

export interface ILesson extends Document {
  course: mongoose.Types.ObjectId; // References parent Course or Sub-Course
  chapterNumber: number;
  title: string;
  description?: string;
  videoReference: string; // Stream ID or Video Reference URL
  durationMinutes?: number;
  price?: number;
  isDownloadableScriptActive: boolean;
  scriptFileUrl?: string;
  isDownloadableHomeworkActive: boolean;
  homeworkFileUrl?: string;
  order: number;
  createdAt: Date;
  updatedAt: Date;
}

const LessonSchema = new Schema<ILesson>(
  {
    course: {
      type: Schema.Types.ObjectId,
      ref: 'Course',
      required: [true, 'Parent course ID is required'],
      index: true,
    },
    chapterNumber: {
      type: Number,
      default: 1,
    },
    title: {
      type: String,
      required: [true, 'Lesson title is required'],
      trim: true,
    },
    description: {
      type: String,
      trim: true,
    },
    videoReference: {
      type: String,
      required: [true, 'Video reference / stream ID is required'],
      trim: true,
    },
    durationMinutes: {
      type: Number,
      default: 0,
    },
    price: {
      type: Number,
      default: 0,
    },
    isDownloadableScriptActive: {
      type: Boolean,
      default: false,
    },
    scriptFileUrl: {
      type: String,
      trim: true,
    },
    isDownloadableHomeworkActive: {
      type: Boolean,
      default: false,
    },
    homeworkFileUrl: {
      type: String,
      trim: true,
    },
    order: {
      type: Number,
      default: 0,
    },
  },
  {
    timestamps: true,
  }
);

LessonSchema.index({ course: 1, order: 1 });

export const Lesson: Model<ILesson> =
  mongoose.models.Lesson || mongoose.model<ILesson>('Lesson', LessonSchema);

export default Lesson;
