package resolver

import (
	"context"
	"fmt"

	"github.com/tidbcloud/jiraport/pkg/clients/lambda"
)

type EventHandler interface {
	Handle(context.Context, lambda.Event)
}

type Resolver struct {
	router map[string]EventHandler
}

func New() (*Resolver, error) {
	return &Resolver{
		router: make(map[string]EventHandler),
	}, nil
}

// start event loop, always spawn new thread to handle a event
func (rs *Resolver) Run(ctx context.Context, ev lambda.Event) error {
	handler, ok := rs.router[ev.Name]
	if ok {
		handler.Handle(ctx, ev)
	} else {
		return fmt.Errorf("resolver not found, event: %v", ev)
	}
	return nil
}

// register event handler with a corresponding event name
func (rs *Resolver) Register(evName string, handler EventHandler) {
	rs.router[evName] = handler
}
