/**
 * UpdateProyectoDto - DTO para actualizar proyectos
 *
 * @module Construction
 * @rf RF-MAI002-001
 */

import {
  IsString,
  IsOptional,
  IsDateString,
  IsEnum,
  MaxLength,
  MinLength,
} from 'class-validator';
import { EstadoProyecto } from '../entities/proyecto.entity';

/**
 * DTO para actualizar un proyecto existente.
 * Todos los campos son opcionales.
 */
export class UpdateProyectoDto {
  @IsOptional()
  @IsString()
  @MinLength(3, { message: 'El codigo debe tener al menos 3 caracteres' })
  @MaxLength(20, { message: 'El codigo no puede exceder 20 caracteres' })
  codigo?: string;

  @IsOptional()
  @IsString()
  @MinLength(3, { message: 'El nombre debe tener al menos 3 caracteres' })
  @MaxLength(200, { message: 'El nombre no puede exceder 200 caracteres' })
  nombre?: string;

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

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

  @IsOptional()
  @IsString()
  @MaxLength(100)
  ciudad?: string;

  @IsOptional()
  @IsString()
  @MaxLength(100)
  estado?: string;

  @IsOptional()
  @IsDateString({}, { message: 'Formato de fecha invalido (usar YYYY-MM-DD)' })
  fechaInicio?: string;

  @IsOptional()
  @IsDateString({}, { message: 'Formato de fecha invalido (usar YYYY-MM-DD)' })
  fechaFinEstimada?: string;

  @IsOptional()
  @IsEnum(['activo', 'pausado', 'completado', 'cancelado'], {
    message: 'Estado invalido',
  })
  estadoProyecto?: EstadoProyecto;
}
