package events

import (
	"context"

	"github.com/nexuscrm/kernel/pkg/ports"
	sharedEvents "github.com/nexuscrm/shared/pkg/events"
)

// Compile-time check: NoOpEventBus implements ports.EventPublisher.
var _ ports.EventPublisher = (*NoOpEventBus)(nil)

// NoOpEventBus discards all events. Used by the headless control-plane
// runtime to prevent listener side effects during pack apply.
type NoOpEventBus struct{}

func (n *NoOpEventBus) Subscribe(_ sharedEvents.EventType, _ ports.EventHandler) func() {
	return func() {}
}

func (n *NoOpEventBus) Publish(_ context.Context, _ sharedEvents.EventType, _ interface{}) error {
	return nil
}

func (n *NoOpEventBus) PublishAsyncWithContext(_ context.Context, _ sharedEvents.EventType, _ interface{}) {
}
