count($rules)], 'Reglas guardadas correctamente'); break; } case 'delete_regla': { // Leer body JSON $input = file_get_contents('php://input'); $data = json_decode($input, true); if (json_last_error() !== JSON_ERROR_NONE) { json_error('JSON inválido', 400); } $chipid = $data['chipid'] ?? ''; $ruleId = $data['ruleId'] ?? ''; if (empty($chipid) || empty($ruleId)) { json_error('ChipID y ruleId requeridos', 400); } // Cargar todas las reglas $allRules = loadRules(); if (!isset($allRules[$chipid])) { json_error('No hay reglas para este dispositivo', 404); } // Filtrar la regla a eliminar $allRules[$chipid] = array_values(array_filter($allRules[$chipid], function($rule) use ($ruleId) { return $rule['id'] !== $ruleId; })); // Guardar if (!saveRules($allRules)) { json_error('Error al guardar reglas', 500); } json_response(true, null, 'Regla eliminada correctamente'); break; } case 'toggle_regla': { // Activar/desactivar una regla $input = file_get_contents('php://input'); $data = json_decode($input, true); if (json_last_error() !== JSON_ERROR_NONE) { json_error('JSON inválido', 400); } $chipid = $data['chipid'] ?? ''; $ruleId = $data['ruleId'] ?? ''; $enabled = $data['enabled'] ?? true; if (empty($chipid) || empty($ruleId)) { json_error('ChipID y ruleId requeridos', 400); } // Cargar todas las reglas $allRules = loadRules(); if (!isset($allRules[$chipid])) { json_error('No hay reglas para este dispositivo', 404); } // Buscar y actualizar la regla $found = false; foreach ($allRules[$chipid] as &$rule) { if ($rule['id'] === $ruleId) { $rule['enabled'] = (bool)$enabled; $found = true; break; } } unset($rule); if (!$found) { json_error('Regla no encontrada', 404); } // Guardar if (!saveRules($allRules)) { json_error('Error al guardar reglas', 500); } json_response(true, null, 'Estado de regla actualizado'); break; } default: json_error('Ruta no encontrada: ' . $route, 404); }