package config

import (
	"context"
	"encoding/json"
	"game/common/config"
	"game/common/constant"
	"github.com/fox/fox/db"
	"github.com/fox/fox/log"
)

const (
	gateKey      = "gate_config"
	gateAddress1 = "0.0.0.0:5100"
	gateAddress2 = "0.0.0.0:5101"
)

var Command *config.Command
var Cfg *config.Common
var GateCfg = &GateConfig{}

type GateConfig struct {
	Address []string `json:"address"` // 网关地址
}

func InitLog() {
	log.Open("./log/gate.log", log.DebugL)
	log.Info("")
	log.Info("")
	log.Info("")
	log.Info("-----init log success-----")
}

func LoadConfig(GitCommit, GitBranch, BuildDate string) {
	Command = config.ParseCommand()
	rdb, err := db.InitRedis(Command.RedisPassword, Command.RedisHost, Command.RedisPort, constant.Redis0Config)
	if err != nil {
		log.Error(err.Error())
		return
	}
	defer func() { _ = rdb.Close() }()
	Cfg, err = config.LoadCommonConfig(rdb, GitCommit, GitBranch, BuildDate)
	if err != nil {
		log.Error(err.Error())
		return
	}
	if err = config.LoadGameConfig(rdb, gateKey, Cfg); err != nil {
		log.DebugF("load config:empty etcd key")
		GateCfg = &GateConfig{
			Address: []string{gateAddress1, gateAddress2},
		}
		if bs, err := json.Marshal(GateCfg); err == nil {
			err = rdb.Set(context.Background(), gateKey, string(bs), 0).Err()
		}
	} else {
		_ = json.Unmarshal([]byte(Cfg.GameJson), GateCfg)
	}
	log.DebugF("load common config success")
	_ = Cfg
}
