import {
  IsString,
  IsOptional,
  IsBoolean,
  IsNumber,
  MaxLength,
  Min,
} from 'class-validator';

/**
 * DTO for creating a lane
 */
export class CreateLaneDto {
  @IsString()
  @MaxLength(50)
  codigo: string;

  @IsString()
  @MaxLength(200)
  nombre: string;

  @IsString()
  @MaxLength(100)
  origenCiudad: string;

  @IsString()
  @MaxLength(100)
  origenEstado: string;

  @IsOptional()
  @IsString()
  @MaxLength(10)
  origenCodigoPostal?: string;

  @IsString()
  @MaxLength(100)
  destinoCiudad: string;

  @IsString()
  @MaxLength(100)
  destinoEstado: string;

  @IsOptional()
  @IsString()
  @MaxLength(10)
  destinoCodigoPostal?: string;

  @IsOptional()
  @IsNumber()
  @Min(0)
  distanciaKm?: number;

  @IsOptional()
  @IsNumber()
  @Min(0)
  tiempoEstimadoHoras?: number;
}

/**
 * DTO for updating a lane
 */
export class UpdateLaneDto {
  @IsOptional()
  @IsString()
  @MaxLength(50)
  codigo?: string;

  @IsOptional()
  @IsString()
  @MaxLength(200)
  nombre?: string;

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

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

  @IsOptional()
  @IsString()
  @MaxLength(10)
  origenCodigoPostal?: string;

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

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

  @IsOptional()
  @IsString()
  @MaxLength(10)
  destinoCodigoPostal?: string;

  @IsOptional()
  @IsNumber()
  @Min(0)
  distanciaKm?: number;

  @IsOptional()
  @IsNumber()
  @Min(0)
  tiempoEstimadoHoras?: number;

  @IsOptional()
  @IsBoolean()
  activo?: boolean;
}
