package support

import (
	"plugin"

	"git.fsdpf.net/go/contracts"
)

func GoPluginCore(core string, controllers map[string]contracts.Controller, listens map[string]contracts.ResListener) {
	p, err := plugin.Open(core)

	if err != nil {
		panic(err)
	}

	if f, err := p.Lookup("RegControllers"); err != nil {
		panic(err)
	} else if fn, ok := f.(func(map[string]contracts.Controller) error); ok {
		fn(controllers)
	}

	if f, err := p.Lookup("RegListens"); err != nil {
		panic(err)
	} else if fn, ok := f.(func(map[string]contracts.ResListener) error); ok {
		fn(listens)
	}

	if f, err := p.Lookup("Run"); err != nil {
		panic(err)
	} else if fn, ok := f.(func()); ok {
		fn()
	}
}