package dev.lions.unionflow.server.service;

import io.quarkus.websockets.next.OpenConnections;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import org.jboss.logging.Logger;

/**
 * Service de broadcast WebSocket pour les notifications temps réel du dashboard.
 */
@ApplicationScoped
public class WebSocketBroadcastService {

    private static final Logger LOG = Logger.getLogger(WebSocketBroadcastService.class);

    @Inject
    OpenConnections openConnections;

    /**
     * Broadcast un message à toutes les connexions WebSocket ouvertes.
     */
    public void broadcast(String message) {
        LOG.debugf("Broadcasting message to %d connections", openConnections.stream().count());
        openConnections.forEach(connection -> connection.sendTextAndAwait(message));
    }

    /**
     * Broadcast une mise à jour de statistiques.
     */
    public void broadcastStatsUpdate(String jsonData) {
        broadcast("{\"type\":\"stats_update\",\"data\":" + jsonData + "}");
    }

    /**
     * Broadcast une nouvelle activité.
     */
    public void broadcastNewActivity(String jsonData) {
        broadcast("{\"type\":\"new_activity\",\"data\":" + jsonData + "}");
    }

    /**
     * Broadcast une mise à jour d'événement.
     */
    public void broadcastEventUpdate(String jsonData) {
        broadcast("{\"type\":\"event_update\",\"data\":" + jsonData + "}");
    }

    /**
     * Broadcast une notification.
     */
    public void broadcastNotification(String jsonData) {
        broadcast("{\"type\":\"notification\",\"data\":" + jsonData + "}");
    }
}
