/**
 * UpdateIncidenteDto - DTO para actualizar incidentes
 *
 * @module HSE
 */

import {
  IsString,
  IsOptional,
  IsEnum,
  IsArray,
  ValidateNested,
} from 'class-validator';
import { Type } from 'class-transformer';
import { InvolucradoDto } from './create-incidente.dto';

/**
 * DTO para actualizar un incidente.
 * fraccionamientoId y fechaHora no se pueden cambiar.
 */
export class UpdateIncidenteDto {
  @IsOptional()
  @IsString()
  ubicacionDescripcion?: string;

  @IsOptional()
  @IsString()
  ubicacionGeo?: string;

  @IsOptional()
  @IsEnum(['accidente', 'incidente', 'casi_accidente'], {
    message: 'Tipo de incidente invalido',
  })
  tipo?: string;

  @IsOptional()
  @IsEnum(['leve', 'moderado', 'grave', 'fatal'], {
    message: 'Gravedad invalida',
  })
  gravedad?: string;

  @IsOptional()
  @IsString()
  descripcion?: string;

  @IsOptional()
  @IsString()
  causaInmediata?: string;

  @IsOptional()
  @IsString()
  causaBasica?: string;

  @IsOptional()
  @IsEnum(['abierto', 'en_investigacion', 'cerrado'], {
    message: 'Estado invalido',
  })
  estado?: string;

  @IsOptional()
  @IsArray()
  @ValidateNested({ each: true })
  @Type(() => InvolucradoDto)
  involucrados?: InvolucradoDto[];
}
