/**
 * CreateFraccionamientoDto - DTO para crear fraccionamientos
 *
 * @module Construction
 * @rf RF-MAI002-002
 */

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

export class CreateFraccionamientoDto {
  /**
   * ID del proyecto al que pertenece
   */
  @IsUUID('4', { message: 'proyectoId debe ser un UUID valido' })
  @IsNotEmpty({ message: 'El proyecto es requerido' })
  proyectoId: string;

  /**
   * Codigo unico del fraccionamiento
   * @example 'FRAC-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 fraccionamiento
   * @example 'Las Palmas Etapa 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 del fraccionamiento
   */
  @IsOptional()
  @IsString()
  descripcion?: string;

  /**
   * Numero total de manzanas
   */
  @IsOptional()
  @IsInt({ message: 'El numero de manzanas debe ser entero' })
  @Min(0, { message: 'El numero de manzanas no puede ser negativo' })
  numeroManzanas?: number;

  /**
   * Numero total de lotes
   */
  @IsOptional()
  @IsInt({ message: 'El numero de lotes debe ser entero' })
  @Min(0, { message: 'El numero de lotes no puede ser negativo' })
  numeroLotes?: number;

  /**
   * Superficie total en metros cuadrados
   */
  @IsOptional()
  @IsNumber({}, { message: 'La superficie debe ser un numero' })
  @Min(0, { message: 'La superficie no puede ser negativa' })
  superficieTotal?: number;
}
