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

export type AutomationJobDocument = AutomationJob & Document;

@Schema({ timestamps: true, collection: 'automation_jobs' })
export class AutomationJob {
  @Prop({ required: true, index: true })
  runId: string;

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

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

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

  @Prop({ required: true, index: true })
  runAt: Date;

  @Prop({ default: 0 })
  attempts: number;

  @Prop()
  lastError?: string;

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

export const AutomationJobSchema = SchemaFactory.createForClass(AutomationJob);

// Índice composto de busca e dedup potencial. Não promovido a unique aqui para
// evitar falha em collections existentes com docs duplicados (sem backfill prévio).
// A guarda de idempotência de enqueue vive em automations.service.ts (enqueuedRunIds)
// + no BullMQ (jobId determinístico deduplica enquanto o job não for evictado).
AutomationJobSchema.index({ runId: 1, nodeKey: 1, attempts: 1 });
AutomationJobSchema.index({ status: 1, runAt: 1 });
