/**
 * CreateEppAsignacionDto - DTO para asignar EPP a empleados
 *
 * @module HSE
 * @rf RF-MAA017-004
 */

import {
  IsString,
  IsNotEmpty,
  IsOptional,
  IsUUID,
  IsDateString,
  IsInt,
  MaxLength,
  Min,
} from 'class-validator';

/**
 * DTO para asignar EPP a un empleado
 */
export class CreateEppAsignacionDto {
  /**
   * ID del empleado que recibe el EPP
   */
  @IsUUID('4', { message: 'empleadoId debe ser un UUID valido' })
  @IsNotEmpty({ message: 'El empleado es requerido' })
  empleadoId: string;

  /**
   * ID del articulo EPP del catalogo
   */
  @IsUUID('4', { message: 'eppCatalogoId debe ser un UUID valido' })
  @IsNotEmpty({ message: 'El articulo EPP es requerido' })
  eppCatalogoId: string;

  /**
   * ID del fraccionamiento/obra
   */
  @IsUUID('4', { message: 'fraccionamientoId debe ser un UUID valido' })
  @IsNotEmpty({ message: 'El fraccionamiento es requerido' })
  fraccionamientoId: string;

  /**
   * Cantidad asignada
   * @example 1
   */
  @IsInt({ message: 'La cantidad debe ser un numero entero' })
  @Min(1, { message: 'La cantidad minima es 1' })
  cantidad: number;

  /**
   * Fecha de asignacion (YYYY-MM-DD)
   * @example '2026-02-03'
   */
  @IsDateString({}, { message: 'Formato de fecha invalido' })
  @IsNotEmpty({ message: 'La fecha de asignacion es requerida' })
  fechaAsignacion: string;

  /**
   * Fecha de vencimiento del EPP (YYYY-MM-DD)
   * @example '2027-02-03'
   */
  @IsOptional()
  @IsDateString({}, { message: 'Formato de fecha invalido' })
  fechaVencimiento?: string;

  /**
   * Talla del EPP (si aplica)
   * @example 'M'
   */
  @IsOptional()
  @IsString()
  @MaxLength(10)
  talla?: string;

  /**
   * Numero de serie o lote
   */
  @IsOptional()
  @IsString()
  @MaxLength(50)
  numeroSerie?: string;

  /**
   * Observaciones de la asignacion
   */
  @IsOptional()
  @IsString()
  observaciones?: string;
}
