import { IsBoolean, IsInt, IsNumber, IsOptional, IsString, Length, Matches, Max, Min } from 'class-validator';

export class SaveRoomDecorPlacementDto {
  @IsOptional()
  @IsString({ message: '摆件ID必须是字符串' })
  @Length(1, 100, { message: '摆件ID长度需在1-100字符之间' })
  @Matches(/^[A-Za-z0-9_:-]+$/, { message: '摆件ID格式不正确' })
  decor_id?: string;

  @IsBoolean({ message: '摆放状态必须是布尔值' })
  placed!: boolean;

  @IsOptional()
  @IsNumber({}, { message: 'X坐标必须是数字' })
  @Min(-2000, { message: 'X坐标超出范围' })
  @Max(2000, { message: 'X坐标超出范围' })
  position_x?: number;

  @IsOptional()
  @IsNumber({}, { message: 'Y坐标必须是数字' })
  @Min(-2000, { message: 'Y坐标超出范围' })
  @Max(2000, { message: 'Y坐标超出范围' })
  position_y?: number;

  @IsOptional()
  @IsNumber({}, { message: '缩放必须是数字' })
  @Min(0.01, { message: '缩放不能太小' })
  @Max(4, { message: '缩放不能太大' })
  scale?: number;

  @IsOptional()
  @IsNumber({}, { message: '旋转角度必须是数字' })
  @IsInt({ message: '旋转角度必须是整数' })
  @Min(0, { message: '旋转角度超出范围' })
  @Max(270, { message: '旋转角度超出范围' })
  rotation_degrees?: number;

  @IsOptional()
  @IsNumber({}, { message: '层级必须是数字' })
  @Min(-1000, { message: '层级超出范围' })
  @Max(1000, { message: '层级超出范围' })
  z_index?: number;
}
