package mdb

import (
	"context"
	"crypto/tls"
	"github.com/go-redis/redis/v8"
	mhayaMongo "github.com/mhaya/components/mongo"
	clog "github.com/mhaya/logger"
	cactor "github.com/mhaya/net/actor"
	cprofile "github.com/mhaya/profile"
	"go.mongodb.org/mongo-driver/mongo"
	"strings"
)

type ActorDB struct {
	cactor.Base
	Name string
}

var (
	MDB *mongo.Database
	RDB redis.UniversalClient
)

func (p *ActorDB) AliasID() string {
	return "database" + p.Name
}

// OnInit Actor初始化前触发该函数
func (p *ActorDB) OnInit() {
	mongo := p.App().Find(mhayaMongo.Name).(*mhayaMongo.Component)
	if mongo == nil {
		clog.DPanicf("[component = %s] not found.", mhayaMongo.Name)
	}

	// 获取 db_id = "center_db_1" 的配置
	dbID := p.App().Settings().GetConfig("db_id_list").GetString("game_db_id")
	MDB = mongo.GetDb(dbID)
	if MDB == nil {
		clog.Panic("game_db_id not found")
	}

	redisConfig := cprofile.GetConfig("redis")
	tlsEnable := redisConfig.GetInt("tls")

	if tlsEnable == 1 {
		tlsConfig := &tls.Config{
			MinVersion:               tls.VersionTLS12,
			PreferServerCipherSuites: true,
		}

		RDB = redis.NewUniversalClient(&redis.UniversalOptions{
			Addrs:     strings.Split(redisConfig.GetString("address"), ","),
			Password:  redisConfig.GetString("password"),
			DB:        redisConfig.GetInt("database"),
			TLSConfig: tlsConfig,
		})
	} else {
		RDB = redis.NewUniversalClient(&redis.UniversalOptions{
			Addrs:    strings.Split(redisConfig.GetString("address"), ","),
			Password: redisConfig.GetString("password"),
			DB:       redisConfig.GetInt("database"),
		})
	}

	clog.Debug("redis address :" + redisConfig.GetString("address"))
	err := RDB.Set(context.Background(), "test", 0, 0).Err()
	if err != nil {
		clog.Errorf("redis client error: %v", err)
	}

	if p.App().NodeId() == "m-center" {
		SetIndex()
	}
}
