package dispatcher

import "github.com/asaskevich/EventBus"

type Subscriber interface {
	Subscribe(topic string, fn interface{})
}

type Emitter interface {
	Emit(topic string, args ...interface{})
}

type Dispatcher interface {
	Subscriber
	Emitter
}

type localEventDispatcher struct {
	bus EventBus.Bus
}

func (d *localEventDispatcher) Subscribe(topic string, fn interface{}) {
	_ = d.bus.Subscribe(topic, fn)
}

func (d *localEventDispatcher) Emit(topic string, args ...interface{}) {
	d.bus.Publish(topic, args...)
}

func New() Dispatcher {
	return &localEventDispatcher{
		bus: EventBus.New(),
	}
}