/**
 * CreatePermisoTrabajoDto - DTO para crear permisos de trabajo
 *
 * @module HSE
 * @rf RF-MAA017-003
 */

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

/**
 * DTO para crear un permiso de trabajo
 */
export class CreatePermisoTrabajoDto {
  /**
   * ID del tipo de permiso de trabajo
   */
  @IsUUID('4', { message: 'tipoPermisoId debe ser un UUID valido' })
  @IsNotEmpty({ message: 'El tipo de permiso es requerido' })
  tipoPermisoId: string;

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

  /**
   * Descripcion del trabajo a realizar
   * @example 'Soldadura de estructura metalica en nivel 3'
   */
  @IsString()
  @IsNotEmpty({ message: 'La descripcion del trabajo es requerida' })
  descripcionTrabajo: string;

  /**
   * Ubicacion especifica del trabajo
   * @example 'Torre A, Nivel 3, Zona Norte'
   */
  @IsString()
  @IsNotEmpty({ message: 'La ubicacion es requerida' })
  @MaxLength(200)
  ubicacion: string;

  /**
   * Fecha y hora de inicio del permiso (ISO 8601)
   * @example '2026-02-03T08:00:00Z'
   */
  @IsDateString({}, { message: 'Formato de fecha invalido' })
  @IsNotEmpty({ message: 'La fecha de inicio es requerida' })
  fechaInicio: string;

  /**
   * Fecha y hora de fin del permiso (ISO 8601)
   * @example '2026-02-03T18:00:00Z'
   */
  @IsDateString({}, { message: 'Formato de fecha invalido' })
  @IsNotEmpty({ message: 'La fecha de fin es requerida' })
  fechaFin: string;

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

  /**
   * Riesgos identificados
   */
  @IsOptional()
  @IsString()
  riesgosIdentificados?: string;

  /**
   * Medidas de control a implementar
   */
  @IsOptional()
  @IsString()
  medidasControl?: string;

  /**
   * EPP requerido para el trabajo
   */
  @IsOptional()
  @IsString()
  eppRequerido?: string;

  /**
   * IDs del personal autorizado
   */
  @IsOptional()
  @IsArray()
  @IsUUID('4', { each: true, message: 'Cada ID debe ser un UUID valido' })
  personalAutorizado?: string[];
}
