package sysconfig

import (
	"bindbox-game/internal/pkg/logger"
	"bindbox-game/internal/repository/mysql"
	"context"
	"sync"
)

var (
	globalDynamicConfig *DynamicConfig
	initOnce            sync.Once
)

// InitGlobalDynamicConfig 初始化全局动态配置实例
// 应在 main.go 中数据库初始化后调用
func InitGlobalDynamicConfig(l logger.CustomLogger, db mysql.Repo) error {
	var initErr error
	initOnce.Do(func() {
		globalDynamicConfig = NewDynamicConfig(l, db)
		// 预加载所有配置
		initErr = globalDynamicConfig.LoadAll(context.Background())
	})
	return initErr
}

// GetGlobalDynamicConfig 获取全局动态配置实例
// 如果未初始化则返回 nil
func GetGlobalDynamicConfig() *DynamicConfig {
	return globalDynamicConfig
}

// MustGetGlobalDynamicConfig 获取全局动态配置实例
// 如果未初始化则 panic
func MustGetGlobalDynamicConfig() *DynamicConfig {
	if globalDynamicConfig == nil {
		panic("动态配置服务未初始化，请先调用 InitGlobalDynamicConfig")
	}
	return globalDynamicConfig
}
