package notification

import (
	"context"

	"galaxy/backend/internal/lobby"
)

// LobbyAdapter returns an implementation of `lobby.NotificationPublisher`
// backed by *Service. The adapter copies the producer-side intent shape
// into notification.Intent and calls Submit; Submit's own malformed
// fallback handles invalid payloads, so the adapter never blocks the
// caller. The interface is the same one The wiring connects through the
// no-op publisher.
func (s *Service) LobbyAdapter() lobby.NotificationPublisher {
	return &lobbyAdapter{svc: s}
}

type lobbyAdapter struct {
	svc *Service
}

func (a *lobbyAdapter) PublishLobbyEvent(ctx context.Context, ev lobby.LobbyNotification) error {
	if a == nil || a.svc == nil {
		return nil
	}
	intent := Intent{
		Kind: ev.Kind,
		IdempotencyKey: ev.IdempotencyKey,
		Recipients: ev.Recipients,
		Payload: ev.Payload,
	}
	_, err := a.svc.Submit(ctx, intent)
	return err
}
