import { Type } from 'class-transformer';
import {
  ArrayMaxSize,
  IsArray,
  IsBase64,
  IsIn,
  IsInt,
  IsOptional,
  IsString,
  IsUUID,
  Max,
  MaxLength,
  Min,
  ValidateNested,
} from 'class-validator';
import { MAX_BYTES_IMAGEN, MAX_IMAGENES, TIPOS_IMAGEN } from 'src/capturas/imagenes';

/** Captura adjunta, en base64 (el panel ya la achicó). La firma y el peso se validan en leerImagenes. */
export class ImagenDto {
  @IsIn(TIPOS_IMAGEN)
  tipo!: string;

  @IsBase64()
  @MaxLength(Math.ceil((MAX_BYTES_IMAGEN * 4) / 3) + 4)
  datos!: string;
}

export class TurnoDto {
  /** Puede venir vacío solo si hay capturas (lo controla el servicio). */
  @IsString()
  @MaxLength(2000)
  texto!: string;

  @IsOptional()
  @IsArray()
  @ArrayMaxSize(MAX_IMAGENES)
  @ValidateNested({ each: true })
  @Type(() => ImagenDto)
  imagenes?: ImagenDto[];
}

export class AdjuntoParams {
  @IsUUID()
  id!: string;

  @IsUUID()
  adjunto!: string;
}

export class TicketParams {
  @IsUUID()
  id!: string;
}

export class ConformidadDto {
  @IsIn(['POSITIVA', 'NEGATIVA'])
  valor!: 'POSITIVA' | 'NEGATIVA';
}

export class ListarTicketsQuery {
  @IsOptional()
  @Type(() => Number)
  @IsInt()
  @Min(1)
  @Max(500)
  pagina?: number;
}
