package configYaml

import (
	"goutil/logUtilPlus"
	"goutil/mysqlUtil"
	"goutil/redisUtil"
	"time"
)

// DbConfig
//
//	@description: mysql配置对象
type DbConfig struct {

	// 实时更新数据库数量{玩家库/用户库}
	dbNum []int

	// 管理员数据库链接字符串
	adminConfig *mysqlUtil.DBConfig

	//	用户数据库链接字符串
	userConfig *mysqlUtil.DBConfig

	// 充值数据库链接字符串
	payConfig *mysqlUtil.DBConfig

	// 游戏模型数据库链接字符串
	gameModelConfig *mysqlUtil.DBConfig

	// 游戏数据库链接字符串
	gameConfig *mysqlUtil.DBConfig

	// 游戏数据库链接字符串
	playerConfig *mysqlUtil.DBConfig

	// redis配置对象
	redisConfig *redisUtil.RedisConfig
}

var (
	// 数据库配置对象
	dbConfigObj *DbConfig
)

// GetAdminConfig
// @description: 获取admin库配置
// parameter:
//
//	@receiver config:config
//
// return:
//
//	@*mysqlUtil.DBConfig:admin库配置
func (config *DbConfig) GetAdminConfig() *mysqlUtil.DBConfig {
	return config.adminConfig
}

// GetUserConfig
// @description: 获取user库配置
// parameter:
//
//	@receiver config:config
//
// return:
//
//	@*mysqlUtil.DBConfig:user库配置
func (config *DbConfig) GetUserConfig() *mysqlUtil.DBConfig {
	return config.userConfig
}

// GetPayConfig
// @description: 获取pay库配置
// parameter:
//
//	@receiver config:config
//
// return:
//
//	@*mysqlUtil.DBConfig:user库配置
func (config *DbConfig) GetPayConfig() *mysqlUtil.DBConfig {
	return config.payConfig
}

// GetGameModelConfig
// @description: 获取model库配置
// parameter:
//
//	@receiver config:config
//
// return:
//
//	@*mysqlUtil.DBConfig:model库配置
func (config *DbConfig) GetGameModelConfig() *mysqlUtil.DBConfig {
	return config.gameModelConfig
}

// GetGameConfig
// @description: 获取Game库配置
// parameter:
//
//	@receiver config:config
//
// return:
//
//	@*mysqlUtil.DBConfig:Game库配置
func (config *DbConfig) GetGameConfig() *mysqlUtil.DBConfig {
	return config.gameConfig
}

// GetPlayerConfig
// @description: 获取玩家库配置
// parameter:
//
//	@receiver config:config
//
// return:
//
//	@*mysqlUtil.DBConfig:玩家库配置
func (config *DbConfig) GetPlayerConfig() *mysqlUtil.DBConfig {
	return config.playerConfig
}

// GetRedisConfig
// @description: 获取redis配置对象
// parameter:
//
//	@receiver config:config
//
// return:
//
//	@*redisUtil.RedisConfig:redis配置
func (config *DbConfig) GetRedisConfig() *redisUtil.RedisConfig {
	return config.redisConfig
}

// newMysqlConfig
//
//	@description: 创建新的Mysql配置对象
//
// parameter:
//
//	@_gameModelConfig:
//	@_gameConfig:
//	@_playerConfig:
//	@_redisConfig:
//
// return:
//
//	@*DbConfig:
func newMysqlConfig(_dbNum []int, _adminConfig *mysqlUtil.DBConfig, _userConfig *mysqlUtil.DBConfig, _payConfig *mysqlUtil.DBConfig, _gameModelConfig *mysqlUtil.DBConfig,
	_gameConfig *mysqlUtil.DBConfig,
	_playerConfig *mysqlUtil.DBConfig,
	_redisConfig *redisUtil.RedisConfig) *DbConfig {
	return &DbConfig{
		dbNum:           _dbNum,
		adminConfig:     _adminConfig,
		userConfig:      _userConfig,
		payConfig:       _payConfig,
		gameModelConfig: _gameModelConfig,
		gameConfig:      _gameConfig,
		redisConfig:     _redisConfig,
		playerConfig:    _playerConfig,
	}
}

// initDbConfig
//
//	@description: 初始化数据库配置
//
// parameter:
//
//	@configObj: 数据库配置
//
// return:
//
//	@error: 错误数据
func initDbConfig() error {

	logUtilPlus.DebugLog("开始加载DbConfig")

	redisConfig := ConfigYaml.Root.DbConfig.RedisConfig
	dbConfig := ConfigYaml.Root.DbConfig

	//if redisConfig == nil {
	//	logUtilPlus.DebugLog("redis配置为空")
	//	return nil
	//}

	// 初始化mysql配置对象
	dbConfigObj = newMysqlConfig(dbConfig.DBNum,
		mysqlUtil.NewDBConfig(dbConfig.AdminDB.ConnectionString, dbConfig.AdminDB.MaxOpenConns, dbConfig.AdminDB.MaxIdleConns),
		mysqlUtil.NewDBConfig(dbConfig.UserDB.ConnectionString, dbConfig.UserDB.MaxOpenConns, dbConfig.UserDB.MaxIdleConns),
		mysqlUtil.NewDBConfig(dbConfig.PayDB.ConnectionString, dbConfig.PayDB.MaxOpenConns, dbConfig.PayDB.MaxIdleConns),
		mysqlUtil.NewDBConfig(dbConfig.GameModel.ConnectionString, dbConfig.GameModel.MaxOpenConns, dbConfig.GameModel.MaxIdleConns),
		mysqlUtil.NewDBConfig(dbConfig.GameDB.ConnectionString, dbConfig.GameDB.MaxOpenConns, dbConfig.GameDB.MaxIdleConns),
		mysqlUtil.NewDBConfig(dbConfig.PlayerDB.ConnectionString, dbConfig.PlayerDB.MaxOpenConns, dbConfig.PlayerDB.MaxIdleConns),
		redisUtil.NewRedisConfig2(redisConfig.ConnectionString, redisConfig.Password, redisConfig.Database, redisConfig.MaxActive, redisConfig.MaxIdle, time.Duration(redisConfig.IdleTimeout)*time.Second, time.Duration(redisConfig.DialConnectTimeout)*time.Second))
	return nil
}

// GetDbConfig
//
//	@description: 获取mysql配置
//
// parameter:
// return:
//
//	@*DbConfig: mysql配置对象
func GetDbConfig() *DbConfig {
	return dbConfigObj
}

func GetDBNum() []int {
	return dbConfigObj.dbNum
}
