import {
  IsString,
  IsIn,
  IsNotEmpty,
  MaxLength,
  IsOptional,
  IsInt,
  Min,
  Max,
  IsObject,
} from 'class-validator';

/**
 * 模型生成类型
 * Normal: 带纹理
 * LowPoly: 低多边形
 * Geometry: 白模
 * Sketch: 草图
 */
export type GenerateType = 'Normal' | 'LowPoly' | 'Geometry' | 'Sketch';

/**
 * 多视图图片类型
 * 支持的视角：left, right, back, top, bottom, left_front (左前45°), right_front (右前45°)
 */
export type MultiViewImages = {
  front?: string;      // 正图（作为主图）
  left?: string;       // 左视图
  right?: string;      // 右视图
  back?: string;       // 后视图
  top?: string;        // 顶视图
  bottom?: string;     // 底视图
  left45?: string;     // 左前45°视图 -> left_front
  right45?: string;    // 右前45°视图 -> right_front
};

export class CreateTaskDto {
  @IsString()
  @IsIn(['text', 'image'], { message: '输入类型必须是 text 或 image' })
  inputType: 'text' | 'image';

  @IsString()
  @IsNotEmpty({ message: '输入内容不能为空' })
  @MaxLength(2000, { message: '输入内容最多2000个字符' })
  inputContent: string;

  @IsOptional()
  @IsString()
  @IsIn(['Normal', 'LowPoly', 'Geometry', 'Sketch'], {
    message: '模型类型必须是 Normal、LowPoly、Geometry 或 Sketch',
  })
  generateType?: GenerateType;

  @IsOptional()
  @IsInt({ message: '模型面数必须是整数' })
  @Min(10000, { message: '模型面数最小为10000' })
  @Max(1500000, { message: '模型面数最大为1500000' })
  faceCount?: number;

  @IsOptional()
  @IsObject({ message: '多视图图片必须是对象' })
  multiViewImages?: MultiViewImages;
}
