import mongoose, { Schema } from 'mongoose';

const demoSlotSchema = new Schema({
  slotId: { type: String, required: true },
  label: { type: String },
  date: { type: String },
  startTime: { type: String },
  endTime: { type: String },
  capacity: { type: Number, default: 100 },
  status: { type: String, enum: ['available', 'closed'], default: 'available' }
});

const demoSchema = new Schema(
  {
    title: { type: String, required: true },
    slug: { type: String, unique: true },
    description: { type: String },
    date: { type: String, required: true },
    startTime: { type: String, required: true },
    endTime: { type: String },
    timezone: { type: String, default: 'IST' },
    googleMeetLink: { type: String },
    googleMeetLinkAvailable: { type: Boolean, default: false },
    googleMeetLinkInfo: { type: String },
    status: {
      type: String,
      enum: ['Scheduled', 'Cancelled', 'Rescheduled', 'Completed'],
      default: 'Scheduled'
    },
    slotsEnabled: { type: Boolean, default: false },
    slots: [demoSlotSchema],
    cancelledReason: { type: String },
    rescheduledFromDate: { type: String },
    rescheduledFromStartTime: { type: String }
  },
  { timestamps: true }
);

// Pre-save middleware to create slug (async — Mongoose 9 does not pass next to regular functions)
demoSchema.pre('save', async function () {
  if (this.title && !this.slug) {
    this.slug = this.title
      .trim()
      .toLowerCase()
      .replace(/[^a-z0-9]+/g, '-')
      .replace(/(^-|-$)/g, '');
  }
});

function DemoModel(dbObject: typeof mongoose) {
  if (dbObject.models && dbObject.models.demos) {
    return dbObject.models.demos;
  }
  return dbObject.model('demos', demoSchema, 'demo');
}

export default DemoModel;
