/**
 * Émission d'événements admin-level via WS.
 *
 * Les événements Shop (create/update/delete) ne sont pas scopés par un shopId
 * car le Shop EST l'entité racine. On émet directement dans la room `admin:{ownerId}`.
 */
import { io } from "@/server"

export interface AdminEvent {
    type: string
    entity: string
    entityId: string
    payload: Record<string, any>
    createdAt: string
}

export function emitAdminEvent(
    ownerId: string,
    event: AdminEvent,
    senderSocketId?: string | null
) {
    const room = `admin:${ownerId}`

    if (senderSocketId) {
        const senderSocket = io.sockets.sockets.get(senderSocketId)
        if (senderSocket) {
            console.log(`[ws] Broadcasting admin:event to ${room} (excluding ${senderSocketId})`, event.type)
            senderSocket.broadcast.to(room).emit("admin:event", event)
            return
        }
    }

    console.log(`[ws] Emitting admin:event to ${room}`, event.type)
    io.to(room).emit("admin:event", event)
}

