package event

import (
	"context"

	"github.com/nspcc-dev/neo-go/pkg/core/block"
	"github.com/nspcc-dev/neo-go/pkg/util"
)

// Handler is an Event processing function.
type Handler func(context.Context, Event)

// BlockHandler is a chain block processing function.
type BlockHandler func(context.Context, *block.Block)

// NotificationHandlerInfo is a structure that groups
// the parameters of the handler of particular
// contract event.
type NotificationHandlerInfo struct {
	Contract util.Uint160
	Type     Type
	Parser   NotificationParser
	Handlers []Handler
}

// NotaryHandlerInfo is a structure that groups
// the parameters of the handler of particular
// notary event.
type NotaryHandlerInfo struct {
	notaryRequestTypes

	h Handler
}

// SetHandler is an event handler setter.
func (nhi *NotaryHandlerInfo) SetHandler(v Handler) {
	nhi.h = v
}

// Handler returns an event handler.
func (nhi NotaryHandlerInfo) Handler() Handler {
	return nhi.h
}