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

export interface DimensionScore {
  first: number;  // E, S, T, J percentage
  second: number; // I, N, F, P percentage
}

export interface PersonalityProfile {
  EI: DimensionScore;
  SN: DimensionScore;
  TF: DimensionScore;
  JP: DimensionScore;
}

export interface IPsychometricResultDocument extends Document {
  test: Types.ObjectId;
  user: Types.ObjectId;
  responses: { statement: Types.ObjectId; value: number }[];
  profile: PersonalityProfile;
  personality_type: string;
  submitted_at: Date;
}

const dimensionScoreSchema = new Schema(
  {
    first: { type: Number, required: true },
    second: { type: Number, required: true },
  },
  { _id: false },
);

const psychometricResultSchema = new Schema<IPsychometricResultDocument>(
  {
    test: { type: Schema.Types.ObjectId, ref: 'PsychometricTest', required: true },
    user: { type: Schema.Types.ObjectId, ref: 'User', required: true },
    responses: [
      {
        statement: { type: Schema.Types.ObjectId, ref: 'PsychometricStatement', required: true },
        value: { type: Number, required: true, min: 1, max: 5 },
      },
    ],
    profile: {
      EI: { type: dimensionScoreSchema, required: true },
      SN: { type: dimensionScoreSchema, required: true },
      TF: { type: dimensionScoreSchema, required: true },
      JP: { type: dimensionScoreSchema, required: true },
    },
    personality_type: { type: String, required: true },
    submitted_at: { type: Date, default: Date.now },
  },
  { timestamps: true },
);

psychometricResultSchema.index({ test: 1, user: 1 }, { unique: true });

export default mongoose.model<IPsychometricResultDocument>('PsychometricResult', psychometricResultSchema);
