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

export class PinDto {
  @ApiProperty({ description: 'PIN-код из 4-6 цифр', example: '1234' })
  @IsString({ message: 'PIN-код должен быть строкой' })
  @Length(4, 6, { message: 'PIN-код должен содержать от 4 до 6 символов' })
  @Matches(/^\d+$/, { message: 'PIN-код должен содержать только цифры' })
  pin!: string;
}

export class OptionalPinDto {
  @ApiPropertyOptional({ description: 'PIN-код для подтверждения действия' })
  @IsOptional()
  @IsString({ message: 'PIN-код должен быть строкой' })
  @Length(4, 6, { message: 'PIN-код должен содержать от 4 до 6 символов' })
  @Matches(/^\d+$/, { message: 'PIN-код должен содержать только цифры' })
  pin?: string;
}

export class VerifySecurityPinDto extends PinDto {
  @ApiProperty({ description: 'ID сессии, которую нужно разблокировать PIN-кодом' })
  @IsString({ message: 'ID сессии должен быть строкой' })
  sessionId!: string;
}

export class TotpCodeDto {
  @ApiProperty({ description: '6-значный код из приложения-аутентификатора', example: '123456' })
  @IsString({ message: 'Код должен быть строкой' })
  @Length(6, 6, { message: 'Код должен содержать 6 цифр' })
  @Matches(/^\d+$/, { message: 'Код должен содержать только цифры' })
  code!: string;
}
