import { ApiProperty } from '@nestjs/swagger';
import { IsInt, IsOptional, IsString, IsEnum, Min } from 'class-validator';
import { Type } from 'class-transformer';
import { QuestionType } from 'src/common/enum/question-type.enum';
import { AnswerType } from 'src/common/enum/answer-type.enum';

export class FilterTemplateQuestionDto {
  @ApiProperty({ description: 'Number of records to return', required: false, default: 10 })
  @IsOptional()
  @Type(() => Number)
  @IsInt()
  @Min(1)
  limit?: number = 10;

  @ApiProperty({ description: 'Number of records to skip', required: false, default: 0 })
  @IsOptional()
  @Type(() => Number)
  @IsInt()
  @Min(0)
  offset?: number = 0;

  @ApiProperty({ description: 'Search text for question text', required: false })
  @IsOptional()
  @IsString()
  searchText?: string;

  @ApiProperty({ description: 'Filter by template form section ID', required: false })
  @IsOptional()
  @Type(() => Number)
  @IsInt()
  templateFormSectionId?: number;

  @ApiProperty({ description: 'Filter by program template ID', required: false })
  @IsOptional()
  @Type(() => Number)
  @IsInt()
  programTemplateId?: number;

  @ApiProperty({ description: 'Filter by master question ID', required: false })
  @IsOptional()
  @Type(() => Number)
  @IsInt()
  masterQuestionId?: number;

  @ApiProperty({ description: 'Filter by question type', enum: QuestionType, required: false })
  @IsOptional()
  @IsEnum(QuestionType)
  questionType?: QuestionType;

  @ApiProperty({ description: 'Filter by answer type', enum: AnswerType, required: false })
  @IsOptional()
  @IsEnum(AnswerType)
  answerType?: AnswerType;
}
