package notifiermgr

import (
	"sync"

	"github.com/ngaut/log"
	"github.com/pingcap/schrodinger/notifiermgr/config"
	"github.com/pingcap/schrodinger/notifiermgr/event"
	"github.com/pingcap/schrodinger/notifiermgr/middleware"
)

// EventLoop will block and run EventLoop
func EventLoop(c config.Config) {
	middleware.ConstructMiddlewares(c)

	var wg sync.WaitGroup

	if c.Main == nil {
		log.Warning("main is not set")
	}
	for _, entry := range *c.Main {
		wg.Add(1)

		entry := entry
		middleware.Middlewares[entry].Input <- event.EmptyEvent{}
		go func() {
			defer wg.Done()

			log.Infof("Start running %s", entry)
			for range middleware.Middlewares[entry].Output {
				// Consume event
			}
		}()
	}

	wg.Wait()
}
