import {
  IsString,
  IsOptional,
  IsNotEmpty,
  Matches,
  IsObject,
} from 'class-validator';
import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger';

/**
 * 设备信息 - 接收任意 JSON 对象
 * 前端可以传递完整的设备硬件信息，后端只提取需要的字段存储
 */
export interface DeviceNameDto {
  model?: string; // 设备型号
  platform?: string; // 平台: ios, android, web
  osVersion?: string; // 系统版本
  brand?: string; // 品牌
  manufacturer?: string; // 厂商
  device?: string; // 设备名
  product?: string; // 产品名
  hardware?: string; // 硬件名
  sdkInt?: number; // SDK 版本 (Android)
  isPhysicalDevice?: boolean; // 是否真机
  [key: string]: unknown; // 允许其他字段
}

export class AutoCreateAccountDto {
  @ApiProperty({
    example: '550e8400-e29b-41d4-a716-446655440000',
    description: '设备唯一标识',
  })
  @IsString()
  @IsNotEmpty()
  deviceId: string;

  @ApiPropertyOptional({
    description: '设备信息 (JSON 对象)',
    example: { model: 'iPhone 15 Pro', platform: 'ios', osVersion: '17.2' },
  })
  @IsOptional()
  @IsObject()
  deviceName?: DeviceNameDto;

  @ApiPropertyOptional({
    example: 'RWAABC1234',
    description: '邀请人推荐码 (6-20位大写字母和数字)',
  })
  @IsOptional()
  @IsString()
  @Matches(/^[A-Z0-9]{6,20}$/, { message: '推荐码格式错误' })
  inviterReferralCode?: string;
}
