import { Prop, Schema, SchemaFactory } from '@nestjs/mongoose';
import { Document, Schema as MongooseSchema } from 'mongoose';

export type AutomationEventDocument = AutomationEvent & Document;

@Schema({ timestamps: true, collection: 'automation_events' })
export class AutomationEvent {
  @Prop({ required: true, index: true })
  eventName: string;

  @Prop({ required: true, index: true })
  source: string;

  @Prop()
  occurredAt?: Date;

  @Prop({ index: true })
  subjectType?: string;

  @Prop({ index: true })
  subjectId?: string;

  @Prop({ index: true })
  contactId?: string;

  @Prop({ index: true })
  userId?: string;

  @Prop({ type: MongooseSchema.Types.Mixed, default: {} })
  payload: Record<string, unknown>;

  @Prop({ required: true, unique: true, index: true })
  idempotencyKey: string;

  @Prop()
  processedAt?: Date;
}

export const AutomationEventSchema =
  SchemaFactory.createForClass(AutomationEvent);

AutomationEventSchema.index({ eventName: 1, createdAt: -1 });
AutomationEventSchema.index({ processedAt: 1 });
