// Copyright F3 Authors
// SPDX-License-Identifier: MIT

package forge

import (
	"fmt"
	"strings"
)

type (
	Factory   func() Interface
	Factories map[string]Factory
)

var factories = make(Factories, 10)

func GetFactories() Factories {
	return factories
}

func RegisterFactory(name string, factory Factory) {
	name = strings.ToLower(name)
	factories[name] = factory
}

func GetFactory(name string) Factory {
	name = strings.ToLower(name)
	factory, ok := factories[name]
	if !ok {
		panic(fmt.Errorf("no factory registered for %s", name))
	}
	return factory
}
