import { Prop, Schema, SchemaFactory } from "@nestjs/mongoose";
import mongoose from "mongoose";
import { IFilterInstruction, IFilterInstructionItem, TFilterInstructionRole, TFilterInstructionUsedIn } from "./filter-instruction.interface";
import { FILTER_INSTRUCTION_ROLE, FILTER_INSTRUCTION_USED_IN } from "./filter-instruction.const";

export type FilterInstructionModel = FilterInstruction & Document;


@Schema({ timestamps: false, _id: false, id: false, versionKey: false })
export class FilterInstructionItem implements IFilterInstructionItem {
    @Prop({ type: String, required: [true, 'Name is required'] })
    name: string;

    @Prop({ type: [String], required: [true, 'Items are required'] })
    items: string[];

    @Prop({ type: Object, required: [true, 'Blocked message is required'] })
    blockedMessage: { en: string; he: string; };
}

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

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

    @Prop({ type: String, required: [true, 'Description is required'] })
    description: string;
    
    @Prop({ type: String, required: false })
    header?: string;

    @Prop({ type: String, required: false })
    footer?: string;

    @Prop({ type: [FilterInstructionItem], required: false })
    instructions?: FilterInstructionItem[];

    @Prop({ type: String, enum: FILTER_INSTRUCTION_ROLE, required: [true, 'Role is required'] })
    role: TFilterInstructionRole;

    @Prop({ type: String, enum: FILTER_INSTRUCTION_USED_IN, required: [true, 'Used in is required'] })
    usedIn: TFilterInstructionUsedIn;

    @Prop({ type: Boolean, default: false })
    isDefault?: boolean;

    @Prop({ type: Number, default: 1 })
    version?: number;

    @Prop({ type: String, required: false })
    versionName?: string;

    createdAt: Date;
    updatedAt: Date;

}

export const FilterInstructionSchema = SchemaFactory.createForClass(FilterInstruction);