import { Prop, Schema, SchemaFactory } from "@nestjs/mongoose";
import mongoose from "mongoose";
import { IFilterTestResult, IFilterTestResultDetails } from "./filter-test-result.interface";
export type FilterTestResultModel = FilterTestResult & Document;

@Schema({ timestamps: false, versionKey: false })
export class FilterDetailsResults implements IFilterTestResultDetails {
    @Prop({ type: String, required: [true, 'Prompt is required'] })
    prompt: string;

    @Prop({ type: String, enum: ['pass', 'fail'], required: false })
    expectedResult: 'pass' | 'fail';

    @Prop({ type: String, enum: ['pass', 'fail'], required: [true, 'Actual result is required'] })
    actualResult: 'pass' | 'fail';

    @Prop({ type: String, required: [true, 'Reason is required'] })
    reason: string;

    @Prop({ type: [String], required: false })
    blockedCategories?: string[];

    @Prop({ type: mongoose.Schema.Types.Mixed, required: false })
    rawResponse?: any;

    @Prop({ type: String, enum: ['question', 'answer'], required: false })
    blockedType?: "question" | "answer";

    
}

@Schema({ timestamps: true })
export class FilterTestResult implements IFilterTestResult {
    _id?: string | mongoose.Types.ObjectId;

    @Prop({ type: Number, required: [true, 'Total prompts is required'] })
    totalPrompts: number;

    @Prop({ type: Number, required: [true, 'Passed prompts is required'] })
    passedPrompts: number;

    @Prop({ type: Number, required: [true, 'Failed prompts is required'] })
    failedPrompts: number;

    @Prop({ type: [FilterDetailsResults], required: [true, 'Details results is required'] })
    detailsResults: FilterDetailsResults[];

    // @Prop({ type: String, required:[true, 'Role is required'] })
    // role: 'user' | 'admin';

    
    // @Prop({ type: String, required: [true, 'Model is required'] })
    // model: 'gpt-3.5' | 'gpt-4' | 'gpt-4o' | 'gpt-4.1-nano';


    @Prop({ type: Object, required: [true, 'Test meta is required'] })
    testMeta: any; // Adjust the type as necessary to match IFilterBatch structure

    createdAt: Date;
    updatedAt: Date;
}

export const FilterTestResultSchema = SchemaFactory.createForClass(FilterTestResult);