false, 'error' => 'No autorizado']); exit; } try { $input = json_decode(file_get_contents('php://input'), true); if (!$input) { $input = $_POST; } $eventType = $input['event_type'] ?? 'message'; $eventData = $input['data'] ?? []; $targetUserId = $input['target_user_id'] ?? 'all'; // ID del operador, no del cliente // Si no se especifica usuario objetivo, broadcast a todos $targets = []; if ($targetUserId === 'all') { // Broadcast: usar archivo global para todos los clientes conectados $targets = ['global']; // Opcional: También enviar a usuarios con token conocidos // (buscar archivos events_token_*.json en uploads) $uploadsDir = __DIR__ . '/../uploads/'; if (is_dir($uploadsDir)) { $tokenFiles = glob($uploadsDir . 'events_token_*.json'); foreach ($tokenFiles as $file) { $basename = basename($file, '.json'); $userId = str_replace('events_', '', $basename); if ($userId && $userId !== 'global') { $targets[] = $userId; } } } } else { $targets = [$targetUserId]; } // Escribir evento en archivos temporales para cada usuario objetivo $eventId = uniqid('evt_', true); $event = [ 'id' => $eventId, 'type' => $eventType, 'data' => $eventData, 'timestamp' => time() ]; $written = 0; foreach ($targets as $target) { $eventsFile = __DIR__ . "/../uploads/events_{$target}.json"; // Asegurar que el directorio existe $dir = dirname($eventsFile); if (!is_dir($dir)) { @mkdir($dir, 0755, true); } // Leer eventos existentes $existingEvents = []; if (file_exists($eventsFile)) { $content = @file_get_contents($eventsFile); if ($content) { $existingEvents = json_decode($content, true) ?: []; } } // Agregar nuevo evento $existingEvents[] = $event; // Mantener solo últimos 50 eventos if (count($existingEvents) > 50) { $existingEvents = array_slice($existingEvents, -50); } // Guardar if (@file_put_contents($eventsFile, json_encode($existingEvents))) { $written++; } } echo json_encode([ 'success' => true, 'event_id' => $eventId, 'targets_notified' => $written ]); } catch (Exception $e) { error_log("push_event.php error: " . $e->getMessage()); http_response_code(500); echo json_encode([ 'success' => false, 'error' => $e->getMessage() ]); }