/**
 * CreateProyectoDto - DTO para crear proyectos
 *
 * @module Construction
 * @rf RF-MAI002-001
 */

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

export class CreateProyectoDto {
  /**
   * Codigo unico del proyecto
   * @example 'PRY-001'
   */
  @IsString()
  @IsNotEmpty({ message: 'El codigo es requerido' })
  @MinLength(3, { message: 'El codigo debe tener al menos 3 caracteres' })
  @MaxLength(20, { message: 'El codigo no puede exceder 20 caracteres' })
  codigo: string;

  /**
   * Nombre del proyecto
   * @example 'Residencial Las Palmas Fase 1'
   */
  @IsString()
  @IsNotEmpty({ message: 'El nombre es requerido' })
  @MinLength(3, { message: 'El nombre debe tener al menos 3 caracteres' })
  @MaxLength(200, { message: 'El nombre no puede exceder 200 caracteres' })
  nombre: string;

  /**
   * Descripcion detallada del proyecto
   */
  @IsOptional()
  @IsString()
  descripcion?: string;

  /**
   * Direccion del proyecto
   */
  @IsOptional()
  @IsString()
  direccion?: string;

  /**
   * Ciudad donde se ubica el proyecto
   */
  @IsOptional()
  @IsString()
  @MaxLength(100)
  ciudad?: string;

  /**
   * Estado/Provincia donde se ubica el proyecto
   */
  @IsOptional()
  @IsString()
  @MaxLength(100)
  estado?: string;

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

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

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