# Changelog

Todos los cambios notables en este proyecto serán documentados en este archivo.

El formato está basado en [Keep a Changelog](https://keepachangelog.com/es-ES/1.0.0/),
y este proyecto adhiere a [Semantic Versioning](https://semver.org/lang/es/).

---

## [1.6.2] - 2025-12-09

### 🐛 Bug Fixes
- **Límite Inteligente (Smart Limit)**: Ahora la opción de límite (5, 10 IPs) busca activamente hasta encontrar esa cantidad de IPs *disponibles*. Antiguamente solo verificaba las primeras de la lista y si estaban ocupadas por ping devolvía 0 resultados.

## [1.6.1] - 2025-12-08

### 🚀 Mejoras de UX/UI
- Reorganización de elementos del formulario: Checkboxes apilados verticalmente (Ping arriba, Ocultar Admin abajo) y dropdown de límite al final.
- **Mensajes de progreso persistentes**: Los mensajes de estado ("Validando por ping...", "Consultando...") ahora permanecen visibles durante todo el proceso.
- **Badge de IP**: Ahora muestra "No disponible" en rojo cuando una IP está en uso por ping o validación de sitios (antes mostraba "Cliente" en verde).
- **Estadísticas reales**: Los contadores de "IPs Disponibles" y "IPs en Uso" ahora reflejan exactamente lo que se muestra en la tabla después de la validación progresiva.

### 🐛 Bug Fixes
- **Límite de IPs**: Corregido bug donde la validación progresiva ignoraba el límite seleccionado (5, 10, 20) y validaba todas.
- **Indicadores de carga**: Corregido problema donde el spinner y mensajes desaparecían prematuramente antes de terminar la validación progresiva.

---

## [1.6.0] - 2025-12-06

### ✨ Añadido
- **Sistema de Validación Multi-Capa de IPs**: Implementación completa de 4 capas de validación para garantizar IPs 100% disponibles.
  - **Capa 1 - Filtrado UISP**: Filtra IPs de dispositivos registrados en UISP
  - **Capa 2 - Filtrado CRM**: Filtra IPs de servicios suspendidos/finalizados
  - **Capa 3 - Validación por Búsqueda de Sitios**: Detecta IPs de clientes activos usando `/sites/search?type=subscriber`
  - **Capa 4 - Verificación por Ping**: Detecta dispositivos de terceros (opcional)
- **IpValidator.php**: Nueva clase para validación de IPs usando búsqueda de sitios en UISP.
- **Validación Progresiva en Frontend**: Las IPs se validan una por una antes de mostrarse en la tabla.
- **Endpoint API `action=validate`**: Nuevo endpoint para validar IPs individuales.
- **Parámetro `type=subscriber`**: Búsqueda específica en sitios de clientes para evitar falsos positivos.

### 🔧 Mejorado
- **CrmService.php**: Filtrado mejorado de servicios suspendidos y finalizados.
  - Mapeo de IPs a sitios bloqueados
  - Extracción de `unmsClientSiteId` de servicios
  - Logging detallado del proceso de filtrado
- **IpSearchService.php**: 
  - Integración con CrmService para filtrado de servicios
  - Parámetro `suspended=true` en API de UISP para incluir dispositivos suspendidos
  - Extracción de todas las IPs de `ipAddressList` además de IP principal
- **public.php**: 
  - Handler para `action=validate` con carga correcta de configuración
  - Integración de validación progresiva en frontend
- **Frontend JavaScript**:
  - Función `runProgressiveValidation()` para validar IPs progresivamente
  - Función `updateRowStatus()` para actualizar estado de filas
  - Solo renderiza IPs que pasan todas las validaciones
  - Mejor feedback visual durante validación

### 🐛 Corregido
- **Bug de variable `$config` indefinida**: Corregido cargando configuración dentro del handler de validación.
- **Falsos positivos en búsqueda de sitios**: Solucionado agregando `type=subscriber` al endpoint.
- **IPs secundarias no detectadas**: Ahora se extraen todas las IPs de `ipAddressList`.
- **Servicios suspendidos/finalizados mostrando IPs disponibles**: Filtrado completo por estado de servicio CRM.

### 📝 Documentación
- **README.md**: Sección completa sobre "Sistema de Validación Multi-Capa de IPs" con:
  - Descripción detallada de cada capa
  - Diagrama de flujo completo de validación
  - Casos de uso y ejemplos
- **Logs mejorados**: Mensajes detallados en cada capa de validación para debugging.

### 🎯 Casos de Uso Resueltos
- ✅ IPs de servicios finalizados ya no aparecen como disponibles
- ✅ IPs de servicios suspendidos ya no aparecen como disponibles
- ✅ IPs de clientes activos (no en `/devices/ips`) son detectadas y filtradas
- ✅ IPs secundarias de dispositivos son detectadas correctamente
- ✅ Dispositivos de terceros son detectados con ping opcional

## [1.5.1] - 2025-12-01

### ✨ Añadido
- **Funcionalidad de Edición en Editor Avanzado**: Completado el CRUD con la capacidad de editar segmentos existentes.
  - Botón "✏️ Editar" en cada fila de la tabla de segmentos
  - Formulario se pre-llena con datos del segmento seleccionado
  - Modo visual de edición con título y botón dinámicos
  - Campo de número de segmento se deshabilita durante edición (no se puede cambiar el ID)

### 🔧 Mejorado
- **Función `addSegmentToTable()`**: Ahora maneja tanto creación como actualización de segmentos.
- **Funciones Helper**: Agregadas funciones auxiliares para gestión de rangos:
  - `clearRangeContainers()` - Limpia contenedores de rangos
  - `addInitialRangeWithData()` / `addFinalRangeWithData()` - Agregan rangos con datos pre-cargados
  - `resetForm()` - Resetea formulario al modo agregar
  - `editSegment()` - Carga datos del segmento en el formulario
- **UX del Editor**: Scroll automático al inicio del formulario al editar.
- **Validación**: Verificación de duplicados solo en modo creación, no en edición.

### 🎨 Interfaz
- Botón de editar con estilo azul distintivo
- Indicadores visuales claros de modo edición vs. agregar
- Mensajes de éxito diferenciados ("agregado" vs. "actualizado")

## [1.5.0] - 2025-11-27

### ✨ Añadido
- **Configuración Avanzada de IPs Administrativas por Segmento**: Sistema completo de gestión de rangos administrativos personalizados por segmento.
  - Editor visual protegido por contraseña
  - Configuración JSON por segmento
  - Múltiples rangos iniciales y finales por segmento
  - Interfaz amigable para gestionar rangos
- **Botón de Configuración Avanzada** (⚙️): Acceso rápido al editor desde la interfaz principal.
- **Modal de Autenticación**: Protección por contraseña para acceso al editor.
- **Fallback Inteligente**: Segmentos no configurados en JSON usan automáticamente rangos globales.
- **Indicador Visual de Modo**: Badge que muestra si está activo "Rangos Personalizados" o "Rangos Globales".
- **Logs de Depuración**: Mensajes detallados en consola para diagnosticar clasificación de IPs.

### 🔧 Mejorado
- **AdminRangeHelper.php**: Nueva clase helper para procesar configuración JSON por segmento.
- **IpSearchService.php**: Lógica mejorada con soporte para rangos personalizados y fallback.
  - Configuración inyectada en constructor para consistencia
  - Rangos dinámicos en lugar de hardcodeados
  - Logs de depuración opcionales con `debugMode`
- **Validación de Cambios**: Advertencia al salir del editor con cambios sin guardar.
- **Tabla de Resultados**: Eliminada columna redundante "Tipo de IP" en escritorio, badge ahora aparece junto a la IP.
- **Inicialización de Datos**: `editorData` se carga correctamente al inicio para asegurar que los rangos personalizados se apliquen inmediatamente.

### 🐛 Corregido
- **Error de Escape de Strings**: Reemplazado `addslashes()` por `json_encode()` para variables PHP en JavaScript, evitando errores de sintaxis.
- **Guardado de Configuración**: Implementada escritura directa a `config.json` debido a limitaciones del SDK de UCRM.
- **Clasificación de IPs en Frontend**: Función `getIpType()` ahora respeta rangos personalizados por segmento, no solo globales.
- **Carga de Configuración Personalizada**: Corregido bug crítico donde `editorData` se inicializaba vacío y nunca se cargaba hasta abrir el editor, causando que los rangos personalizados fueran ignorados.
- **Comparación de Segmentos**: Mejorada robustez con conversión explícita a string y trim para evitar fallos por espacios o tipos de datos.

### 🎨 Interfaz
- Editor visual completo con formularios dinámicos
- Tabla de segmentos configurados
- Agregar/eliminar rangos en tiempo real
- Diseño responsive con soporte para temas claro/oscuro
- Valor por defecto de 254 para rangos finales (optimización UX)

## [1.4.0] - 2025-11-27

### ✨ Añadido
- **Rangos de IPs Administrativas Configurables**: Ahora puedes configurar qué rangos de IPs se consideran administrativas mediante 4 campos numéricos en la configuración del plugin (inicio/fin de rango inicial y final), en lugar de tener valores fijos (1-30 y 254).

### 🔧 Mejorado
- **Flexibilidad**: Permite adaptar la clasificación de IPs según las necesidades específicas de cada red.
- **Backend y Frontend**: Toda la lógica de clasificación ahora usa configuración dinámica.

## [1.3.3] - 2025-11-27

### ✨ Añadido
- **Modo Claro/Oscuro**: Botón toggle (☀️/🌙) en esquina superior derecha para cambiar entre temas con persistencia en localStorage.
- **Tema Claro**: Paleta de colores profesional para uso diurno con fondo claro y textos oscuros.

### 🔄 Mejorado
- **Tabla Móvil**: Optimizada para pantallas pequeñas ocultando columna "Tipo de IP" y mostrando el badge bajo la dirección IP (3 columnas en lugar de 5).
- **Límite por Defecto**: Cambiado a 5 IPs para búsquedas más rápidas.
- **Tipografía**: Direcciones IP más destacadas con fuente más grande y negrita.

## [1.3.2] - 2025-11-26

### ✨ Añadido
- **Botón de Cancelar Verificación**: Nuevo botón dinámico que aparece durante la verificación por ping, permitiendo detener el proceso en cualquier momento mientras se conservan los resultados ya obtenidos.

### 🔄 Mejorado
- **Responsividad Móvil**: Optimizada la alineación de checkboxes en dispositivos móviles para una mejor experiencia visual.

## [1.3.1] - 2025-11-26

### 🔄 Refinado
- **Renderizado Secuencial**: Las IPs de cliente aparecen una por una en la tabla conforme se inician sus verificaciones, creando un efecto visual más limpio y ordenado.
- **Limpieza de Resultados**: Si se selecciona un límite (ej. 5 IPs), la tabla solo muestra esas 5 IPs de cliente (más las administrativas), ocultando el resto del segmento.
- **Textos UI**: Actualizados para mayor claridad ("Válida para cliente", "Sólo validada con UISP").

## [1.3.0] - 2025-11-26

### ✨ Añadido
- **Carga Progresiva**: Los resultados de la búsqueda aparecen inmediatamente y la verificación por ping se realiza en segundo plano, actualizando el estado en tiempo real.
- **Feedback Visual Mejorado**: Nuevos iconos de estado (⏳ Verificando, ✅ Disponible, ⚠️ En uso) en la tabla de resultados.
- **Filtro de IPs Administrativas**: Nuevo checkbox para ocultar/mostrar IPs de administración (1-30, 254) al instante.

### 🔄 Mejorado
- **Rendimiento**: La interfaz ya no se bloquea durante la verificación por ping.
- **Experiencia de Usuario**: Se puede ver el progreso de la verificación IP por IP.

---

## [1.2.1] - 2025-11-26

### ✨ Añadido
- **Límite de IPs para verificación**: Nuevo selector para limitar la cantidad de IPs a verificar con ping (5, 10, 20 o Todas)
  - Evita timeouts en segmentos grandes
  - Prioriza IPs de cliente (las administrativas se muestran sin verificar cuando hay límite)
- **Defaults mejorados**: Checkbox de verificación activado por defecto (si está habilitado en config)

### 🔄 Mejorado
- **Optimización de verificación**: Al usar un límite, las IPs administrativas se excluyen del ping para acelerar el proceso
- **Interfaz de usuario**: Feedback visual más claro sobre el límite aplicado

---

## [1.2.0] - 2025-11-26

### ✨ Añadido

#### Verificación por Ping
- **Clase `PingService.php`**: Servicio de verificación de IPs mediante ping
  - Ping paralelo a múltiples IPs simultáneamente (hasta 30 IPs por lote)
  - Timeout configurable (default: 1 segundo)
  - Detección automática de disponibilidad del comando ping
  - Procesamiento en lotes para evitar sobrecarga de red
  - Fallback graceful si ping no está disponible
- **Parámetro de configuración `enablePingVerification`**: Control global de verificación por ping
  - Modo opcional: usuario decide en cada búsqueda
  - Checkbox condicional en frontend (solo visible si está habilitado)
  - Parámetro `verify_ping` en API REST
- **Detección de dispositivos no registrados**: Identifica IPs que responden a ping pero no están en UISP
  - Filtra automáticamente IPs que responden
  - Advertencias en logs para IPs no registradas
  - Estadísticas de ping en respuestas

#### Integración
- **Frontend**: Checkbox "Verificar con ping" (condicional según configuración)
  - Solo visible si `enablePingVerification` está habilitado
  - Integrado en formulario de búsqueda
  - Indicador de progreso durante verificación
- **API REST**: Soporte para parámetro `verify_ping` en ambos endpoints
  - `event.ip_request`: Incluye estadísticas de ping en respuesta
  - `event.ip_check`: Indica si IP específica responde a ping
  - Campo `ping_verified` en todas las respuestas
  - Campo `ping_stats` con métricas detalladas

### 🔄 Mejorado

- **`IpSearchService::buscarIpsDisponibles()`**: Ahora acepta parámetro `$verifyPing`
  - Integración transparente con `PingService`
  - Filtrado automático de IPs que responden
  - Logging detallado de resultados de ping
- **Respuestas de API**: Información enriquecida con datos de ping
  - Estadísticas: total verificado, respondiendo, no respondiendo
  - Tiempo de ejecución de verificación
  - Lista de IPs que responden (posibles conflictos)

### 🔧 Técnico

- **Ping paralelo**: Implementación usando procesos en background
  - Archivos temporales para capturar resultados
  - Espera asíncrona con timeout
  - Limpieza automática de archivos temporales
- **Performance**: Optimizado para grandes rangos de IPs
  - Procesamiento en lotes de 30 IPs
  - Timeout total controlado
  - Mínimo impacto en tiempo de respuesta

---

## [1.1.0] - 2025-11-26

### ✨ Añadido

#### API REST Completa
- **Endpoint `event.ip_request`**: Búsqueda de IPs disponibles en un segmento de red
  - Acepta parámetro `segment` para especificar el tercer octeto (0-255)
  - Retorna lista de IPs disponibles y en uso
  - Filtra automáticamente IPs administrativas (1-30, 254)
  - Incluye contadores de IPs disponibles, en uso y filtradas
- **Endpoint `event.ip_check`**: Verificación de estado de una IP específica
  - Acepta parámetro `ip` con dirección completa (172.16.X.X)
  - Retorna estado: disponible, en uso o desconocido
  - Incluye información del tipo de IP (administrativa vs. cliente)
  - Proporciona recomendaciones de uso
- **Soporte para webhooks**: Habilitado `supportsWebhookEvents: true` en manifest
- **Manejo de peticiones JSON**: Detección automática de Content-Type para API vs Frontend

#### Arquitectura y Código
- **Clase `ApiHandlers.php`**: Manejadores dedicados para eventos de API REST
  - `handleApiRequest()`: Router principal de eventos
  - `handleIpRequest()`: Procesamiento de búsqueda de IPs
  - `handleIpCheck()`: Procesamiento de verificación de IPs
- **Clase `IpSearchService.php`**: Servicio de búsqueda de IPs con lógica de negocio
  - `buscarIpsDisponibles()`: Búsqueda de IPs en segmento específico
  - `obtenerIpsEnUso()`: Obtención de IPs desde API UNMS
  - `isAdminIp()`: Método estático para detectar IPs administrativas
  - `getIpType()`: Método estático para obtener información del tipo de IP
- **Sistema de filtrado de IPs**: Clasificación automática de IPs administrativas vs. cliente
  - Rango administrativo: .1-.30 y .254
  - Rango cliente: .31-.253
  - Etiquetas visuales en frontend
  - Filtrado automático en API REST

#### Documentación
- **README.md completo**: Documentación profesional del plugin
  - Guía de instalación y configuración
  - Documentación completa de API REST
  - Ejemplos de uso en múltiples lenguajes (cURL, PHP, JavaScript, Python)
  - Tabla de códigos de error
  - Troubleshooting y soporte
- **CHANGELOG.md**: Archivo dedicado para control de versiones

### 🔄 Mejorado

- **Separación de responsabilidades**: Lógica de negocio separada en clases dedicadas
- **Manejo de errores mejorado**: Respuestas JSON estructuradas con códigos de error descriptivos
- **Sistema de logging**: Logs más detallados y organizados para debugging
  - Registro de tipo de petición (HTML vs JSON)
  - Logging de eventos API procesados
  - Información de errores con stack traces
- **Compatibilidad dual**: Frontend HTML y API REST funcionan simultáneamente
  - Detección automática del tipo de petición
  - Sin interferencia entre modos
- **Validación de datos**: Validación robusta de parámetros en API
  - Validación de formato de IP
  - Validación de rangos de segmento
  - Mensajes de error descriptivos

### 🔧 Técnico

- **Namespace PHP**: `SiipAvailableIps` para evitar conflictos
- **Manejo global de errores**: Error handler para convertir errores PHP en respuestas JSON
- **Configuración SSL**: Soporte para certificados autofirmados en desarrollo
- **Timeouts configurados**: Timeouts de conexión y ejecución para API UNMS

---

## [1.0.1] - 2025-11-25

### ✨ Añadido

- **Frontend web moderno**: Interfaz de usuario con diseño responsive y atractivo
  - Diseño con gradientes y glassmorphism
  - Tipografía Google Fonts (Inter)
  - Animaciones suaves y micro-interacciones
  - Modo oscuro integrado
- **Búsqueda de IPs por segmento**: Campo de entrada para tercer octeto
- **Función copiar al portapapeles**: Botón de copia rápida para cada IP
  - Feedback visual al copiar
  - Compatible con navegadores modernos
- **Estadísticas en tiempo real**: Contadores de IPs disponibles y en uso
  - Tarjetas de estadísticas visuales
  - Actualización dinámica tras búsqueda
- **Integración con API UNMS**: Conexión directa con UISP Network
  - Obtención de IPs en uso desde dispositivos
  - Soporte para HTTPS
  - Manejo de errores de conexión

### 🔄 Mejorado

- **Conexión con API UNMS**: Optimización de peticiones HTTP
  - Timeouts configurables
  - Mejor manejo de errores de red
  - Logging de respuestas
- **Búsqueda de IPs**: Algoritmo optimizado para comparación de rangos
  - Ordenamiento de IPs por último octeto
  - Cálculo eficiente de IPs disponibles
  - Validación de segmentos (0-255)

### 🐛 Corregido

- Mejoras en la estabilidad de conexión con API UNMS
- Corrección de validación de segmentos fuera de rango
- Fix en ordenamiento de IPs en tabla de resultados

---

## [1.0.0] - 2025-11-25

### ✨ Lanzamiento Inicial

#### Funcionalidades Core
- **Búsqueda básica de IPs**: Funcionalidad principal del plugin
  - Búsqueda en rangos 172.16.X.x
  - Detección de IPs en uso
  - Cálculo de IPs disponibles
- **Integración con UISP CRM**: Plugin nativo para UCRM
  - Instalación vía interfaz de plugins
  - Configuración desde panel de administración
  - Acceso desde menú de reportes
- **Interfaz web básica**: Primera versión del frontend
  - Formulario de búsqueda simple
  - Tabla de resultados
  - Diseño básico responsive

#### Configuración
- **Parámetros de configuración**:
  - Dirección IP/dominio del servidor
  - Token de API UCRM
  - Token de API UNMS (opcional)
  - Modo debug
  - Nivel de logging

#### Integración
- **API UNMS**: Conexión con UISP Network para obtener IPs
- **Sistema de logs**: Archivo `plugin.log` para debugging
- **Compatibilidad**: UCRM 1.0.0+ y UNMS 1.0.0+

---

## Tipos de Cambios

- **✨ Añadido**: Para nuevas funcionalidades
- **🔄 Mejorado**: Para cambios en funcionalidades existentes
- **🐛 Corregido**: Para corrección de bugs
- **🔧 Técnico**: Para cambios técnicos internos
- **🗑️ Eliminado**: Para funcionalidades removidas
- **⚠️ Deprecado**: Para funcionalidades que serán removidas
- **🔒 Seguridad**: Para parches de seguridad

---

## Versionamiento

Este proyecto sigue [Semantic Versioning](https://semver.org/lang/es/):

- **MAJOR** (X.0.0): Cambios incompatibles con versiones anteriores
- **MINOR** (0.X.0): Nueva funcionalidad compatible con versiones anteriores
- **PATCH** (0.0.X): Correcciones de bugs compatibles con versiones anteriores

---

**Última actualización**: 26 de noviembre de 2025
