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

export class UpdateTemplateQuestionDto {
  @ApiProperty({ description: 'Question code', required: false })
  @IsOptional()
  @IsString()
  @MaxLength(100)
  questionCode?: string;

  @ApiProperty({ description: 'Binding key', required: false })
  @IsOptional()
  @IsString()
  @MaxLength(100)
  bindingKey?: string;

  @ApiProperty({ description: 'Question text', required: false })
  @IsOptional()
  @IsString()
  questionText?: string;

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

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

  @ApiProperty({ description: 'Answer location', required: false })
  @IsOptional()
  @IsString()
  @MaxLength(1024)
  answerLocation?: string;

  @ApiProperty({ description: 'Option configuration', required: false, type: [Object] })
  @IsOptional()
  @IsObject({ each: true })
  optionConfig?: Record<string, any>[];

  @ApiProperty({ description: 'Question configuration', required: false, type: Object })
  @IsOptional()
  @IsObject()
  config?: Record<string, any>;

  @ApiProperty({ description: 'Conditional configuration for program/field-based conditions', required: false, type: Object })
  @IsOptional()
  @IsObject()
  conditionalConfig?: Record<string, any>;

  @ApiProperty({ description: 'Display order', required: false })
  @IsOptional()
  @IsInt()
  displayOrder?: number;

  @ApiProperty({ description: 'User ID who updated this question', required: false })
  @IsOptional()
  @IsInt()
  updatedBy?: number;
}
