package reloadMgr

import (
	"fmt"

	"goutil/logUtil"
)

var (
	reloadFuncMap = make(map[string]func() error)
)

// RegisterReloadFunc ...注册Reload方法
// funcName:方法名称
// reloadFunc：reload方法
func RegisterReloadFunc(funcName string, reloadFunc func() error) {
	if _, exists := reloadFuncMap[funcName]; exists {
		panic(fmt.Sprintf("%s已经存在，请重新取名", funcName))
	}

	reloadFuncMap[funcName] = reloadFunc
	logUtil.InfoLog(fmt.Sprintf("RegisterReloadFunc funcName:%s，当前共有%d个注册", funcName, len(reloadFuncMap)))
}

// Reload ...重新加载
// 返回值：
// 错误列表
func Reload() (errList []error) {
	for funcName, reloadFunc := range reloadFuncMap {
		if err := reloadFunc(); err == nil {
			logUtil.InfoLog(fmt.Sprintf("Call ReloadFunc:%s Success.", funcName))
		} else {
			logUtil.ErrorLog(fmt.Sprintf("Call ReloadFunc:%s Fail, Error:%s", funcName, err))
			errList = append(errList, err)
		}
	}

	return
}
