package configYaml

var ConfigYaml = Config{}

// Config 定义与 YAML 文件结构匹配的结构体
type Config struct {
	Root Root
}

// Root 是整个配置文件的根结构体
type Root struct {
	// 是否是调试模式
	Debug bool `yaml:"debug"`

	// 是否是 CrossServer 中心节点（标记为 true 时，才会进行排行榜处理）
	CrossServerCenter bool `yaml:"cross_server_center"`

	// ManagerCenter 配置
	ManagerCenterConfig ManagerCenterConf `yaml:"manager_center_config"`

	// logmgr 配置
	LogMgr LogMgr `yaml:"log_mgr"`

	// 微信登录配置
	Wxconfig WxConfig `yaml:"wx_config"`

	// Web 服务监听地址和端口
	WebServerAddress string `yaml:"web_server_address"`

	// gRPC 监听地址和端口 (内网地址即可)
	GrpcServerAddress string `yaml:"grpc_server_address"`

	// 战斗服务器地址
	FightServerAddress string `yaml:"fight_server_address"`

	// 数据中心地址
	DataCenterAddress string `yaml:"data_center_address"`

	// OrderId 和 BigGroupId（仅用于非 PlayerServer）
	OrderId    int `yaml:"order_id"`
	BigGroupId int `yaml:"big_group_id"`

	// 重启时载入 Redis 数据日期范围
	BaseDay int `yaml:"base_day"`

	// ES 地址
	EsUrls string `yaml:"es_urls"`

	// rabbitMQ 地址
	RabbitMQAddress string `yaml:"rabbitmq_address"`

	// mq队列名称
	RabbitMQName string `yaml:"mq_queue_name"`

	// 是否使用mq执行sql
	SqlUseMQ bool `yaml:"sql_use_mq"`

	// 数据库配置
	DbConfig DBConfig `yaml:"db_config"`

	// 监控相关配置
	MonitorConfig MonitorConf `yaml:"monitor_config"`

	// 功能开关配置
	FunctionConfig FunctionConf `yaml:"function_config"`
}

type WxConfig struct {

	//微信移动应用appId
	AppId string `yaml:"appId"`
	//微信移动应用appSecret
	AppSecret string `yaml:"appSecret"`
}

// ManagerCenterConf 是 ManagerCenter 的配置结构体
type ManagerCenterConf struct {
	// ManagerCenter API 的 URL
	ManageCenterAPIUrl string `yaml:"manage_center_api_url"`

	// 服务器组类型
	GroupType string `yaml:"group_type"`

	// 刷新间隔，单位：分钟
	RefreshInterval int `yaml:"refresh_interval"`
}

// LogMgr 是日志管理器的配置结构体
type LogMgr struct {
	// group boxId
	GroupId string `yaml:"group_id"`

	// group secret
	GroupSecret string `yaml:"group_secret"`

	// product boxId
	ProductId string `yaml:"product_id"`
}

// DBConfig 包含数据库和 Redis 的配置
type DBConfig struct {

	// 实时更新数据库数量{玩家库/用户库}
	DBNum []int `yaml:"db_num"`

	//管理员数据库配置
	AdminDB DatabaseConfig `yaml:"admin_db"`

	// 用户数据库配置
	UserDB DatabaseConfig `yaml:"user_db"`

	// 用户数据库配置
	PayDB DatabaseConfig `yaml:"pay_db"`

	// 游戏模型数据库配置
	GameModel DatabaseConfig `yaml:"game_model"`

	// 游戏数据库配置
	GameDB DatabaseConfig `yaml:"game_db"`

	// 玩家数据库配置
	PlayerDB DatabaseConfig `yaml:"player_db"`

	// Redis 配置
	RedisConfig RedisConfig `yaml:"redis_config"`
}

// DatabaseConfig 是数据库连接的配置结构体
type DatabaseConfig struct {
	// 最大处于开启状态的连接数
	MaxOpenConns int `yaml:"max_open_conns"`

	// 最大处于空闲状态的连接数
	MaxIdleConns int `yaml:"max_idle_conns"`

	// 数据库连接字符串
	ConnectionString string `yaml:"connection_string"`
}

// RedisConfig 是 Redis 连接的配置结构体
type RedisConfig struct {
	// Redis 数据库连接字符串
	ConnectionString string `yaml:"connection_string"`

	// 密码, 如果要设置用户 Id，则密码设置为: "UserId:Password"
	Password string `yaml:"password"`

	// 数据库序号
	Database int `yaml:"database"`

	// 最大活跃连接数
	MaxActive int `yaml:"max_active"`

	// 最大空闲的连接数
	MaxIdle int `yaml:"max_idle"`

	// 连接空闲超时时间，单位:秒
	IdleTimeout int `yaml:"idle_timeout"`

	// 连接超时时间, 单位：秒
	DialConnectTimeout int `yaml:"dial_connect_timeout"`
}

// MonitorConf 是监控配置的结构体
type MonitorConf struct {
	// 监控使用的服务器 IP (本机的外网地址)
	ServerIP string `yaml:"server_ip"`

	// 监控使用的服务器名称
	ServerName string `yaml:"server_name"`

	// 监控的时间间隔（单位：分钟）
	Interval int `yaml:"interval"`
}

// FunctionConf 是功能开关配置的结构体
type FunctionConf struct {
	// 游戏代码: qyc, xh, dzz
	GameCode string `yaml:"game_code"`
}
