/**
 * CreateCapacitacionDto - DTO para crear capacitaciones
 *
 * @module HSE
 * @rf RF-MAA017-002
 */

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

/**
 * DTO para crear una capacitacion HSE
 */
export class CreateCapacitacionDto {
  /**
   * Nombre de la capacitacion
   * @example 'Trabajo en Alturas NOM-009'
   */
  @IsString()
  @IsNotEmpty({ message: 'El nombre es requerido' })
  @MaxLength(200)
  nombre: string;

  /**
   * Descripcion de la capacitacion
   */
  @IsOptional()
  @IsString()
  descripcion?: string;

  /**
   * Tipo de capacitacion
   * @example 'normativa'
   */
  @IsEnum(['induccion', 'especifica', 'normativa', 'reciclaje', 'emergencia'], {
    message: 'Tipo de capacitacion invalido',
  })
  @IsNotEmpty()
  tipo: string;

  /**
   * ID de la norma STPS relacionada
   */
  @IsOptional()
  @IsUUID('4')
  normaStpsId?: string;

  /**
   * Duracion en horas
   * @example 8
   */
  @IsInt({ message: 'La duracion debe ser un numero entero' })
  @Min(1, { message: 'La duracion minima es 1 hora' })
  duracionHoras: number;

  /**
   * Vigencia en meses (0 = sin vencimiento)
   * @default 0
   */
  @IsOptional()
  @IsInt()
  @Min(0)
  vigenciaMeses?: number;

  /**
   * Requiere evaluacion
   * @default false
   */
  @IsOptional()
  @IsBoolean()
  requiereEvaluacion?: boolean;

  /**
   * Calificacion minima para aprobar (0-100)
   * @example 80
   */
  @IsOptional()
  @IsInt()
  @Min(0)
  calificacionMinima?: number;

  /**
   * Emite constancia DC-3
   * @default false
   */
  @IsOptional()
  @IsBoolean()
  emiteDc3?: boolean;

  /**
   * ID del instructor por defecto
   */
  @IsOptional()
  @IsUUID('4')
  instructorDefaultId?: string;
}
