export type XSelectEvent = 'xselect-opened'

type Listener = {
	event: XSelectEvent
	cb: (payload: string) => void
	id: number
}

class XSelectBus {
	private listeners: Listener[] = []
	private counter = 0

	emit(event: XSelectEvent, payload: string) {
		this.listeners.forEach(l => {
			if (l.event === event) {
				l.cb(payload)
			}
		})
	}

	on(event: XSelectEvent, cb: (payload: string) => void) {
		const id = ++this.counter
		this.listeners.push({ event, cb, id })

		// retourne une fonction unsubscribe
		return () => {
			this.listeners = this.listeners.filter(l => l.id !== id)
		}
	}
}

const xselectBus = new XSelectBus()
export default xselectBus
