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

export type AhaProgressDocument = AhaProgress & Document;

@Schema({ timestamps: true, collection: 'aha_progress' })
export class AhaProgress {
  @Prop({ required: true, index: true })
  actor_id: string;

  @Prop({ required: true, enum: ['advisor'], index: true })
  actor_role: 'advisor';

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

  @Prop({ required: true })
  journey_started_at: Date;

  @Prop({ type: [String], default: [] })
  key_events_seen: string[];

  @Prop({ type: Object, default: {} })
  key_events_counts: Record<string, number>;

  @Prop({ type: [String], default: [] })
  key_events_completed: string[];

  @Prop({ type: Object, default: {} })
  key_events_completed_at: Record<string, Date>;

  @Prop()
  required_key_events_completed_at?: Date;

  @Prop({ type: [String], default: [] })
  key_screens_seen: string[];

  @Prop({ required: true, default: 0 })
  key_screens_seen_count: number;

  @Prop()
  key_screens_completed_at?: Date;

  @Prop()
  return_completed_at?: Date;

  @Prop()
  aha_reached_at?: Date;

  @Prop({ required: true })
  last_event_at: Date;
}

export const AhaProgressSchema = SchemaFactory.createForClass(AhaProgress);

AhaProgressSchema.index(
  { actor_id: 1, actor_role: 1, rule_version: 1 },
  { unique: true },
);
AhaProgressSchema.index({ rule_version: 1, actor_role: 1 });
AhaProgressSchema.index({ aha_reached_at: 1 });
