package exerr

import (
	"sync"
)

type Method string

const (
	MethodOutput Method = "OUTPUT"
	MethodPrint  Method = "PRINT"
	MethodBuild  Method = "BUILD"
	MethodFatal  Method = "FATAL"
)

type Listener = func(method Method, v *ExErr)

var listenerLock = sync.Mutex{}
var listener = make([]Listener, 0)

func RegisterListener(l Listener) {
	listenerLock.Lock()
	defer listenerLock.Unlock()

	listener = append(listener, l)
}

func (ee *ExErr) CallListener(m Method) {
	listenerLock.Lock()
	defer listenerLock.Unlock()

	for _, v := range listener {
		v(m, ee)
	}
}