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

export enum TipoOperacionPin {
  APERTURA_CAJA = 'apertura_caja',
  CIERRE_CAJA = 'cierre_caja',
  ANULACION = 'anulacion',
  DESCUENTO = 'descuento',
  RETIRO_CAJA = 'retiro_caja',
  INGRESO_CAJA = 'ingreso_caja',
  NOTA_CREDITO = 'nota_credito',
  CAMBIO_PRECIO = 'cambio_precio',
  VENTA_CREDITO = 'venta_credito',
  ARQUEO_DIFERENCIA = 'arqueo_diferencia',
  CANCELAR_CIERRE = 'cancelar_cierre',
}

export class ValidarPinDto {
  @ApiProperty({ description: 'Username o ID del supervisor', example: 'admin' })
  @IsString()
  usuario_id_or_username: string;

  @ApiProperty({ description: 'PIN numérico', example: '1234' })
  @IsString()
  @MinLength(4)
  @MaxLength(6)
  @Matches(/^\d{4,6}$/, { message: 'El PIN debe ser numérico de 4 a 6 dígitos' })
  pin: string;

  @ApiProperty({ description: 'Tipo de operación que requiere autorización', enum: TipoOperacionPin })
  @IsEnum(TipoOperacionPin)
  tipo_operacion: TipoOperacionPin;

  @ApiPropertyOptional({ description: 'Contexto adicional de la operación' })
  @IsOptional()
  @IsObject()
  contexto?: Record<string, unknown>;
}
