package registry

import (
	"context"

	"git.lumeweb.com/LumeWeb/portal/config"

	"go.uber.org/fx"
)

const GroupName = "protocols"

type Protocol interface {
	Name() string
	Init(ctx context.Context) error
	Start(ctx context.Context) error
	Stop(ctx context.Context) error
	Config() config.ProtocolConfig
}

type ProtocolEntry struct {
	Key         string
	Module      fx.Option
	PreInitFunc interface{}
}

var protocolEntry []ProtocolEntry

func Register(entry ProtocolEntry) {
	protocolEntry = append(protocolEntry, entry)
}

func GetRegistry() []ProtocolEntry {
	return protocolEntry
}

func FindProtocolByName(name string, protocols []Protocol) Protocol {
	for _, protocol := range protocols {
		if protocol.Name() == name {
			return protocol
		}
	}
	return nil
}