package redisutil

import (
	"context"
	"crypto/tls"
	"dataservices/commons/config"

	"github.com/go-redis/redis/v8"
)

var masterRedisClient *redis.Client
var logQueryRedisClient *redis.Client

func NewRedisClient(ctx context.Context, centralConfig *config.CentralConfig) error {
	var err error
	masterRedisClient, err = newClientWithConf(ctx, centralConfig.RedisConf)
	if err != nil {
		return err
	}
	if centralConfig.LogQueryRedisConf.MasterAddr != "" {
		logQueryRedisClient, err = newClientWithConf(ctx, centralConfig.LogQueryRedisConf)
		if err != nil {
			return err
		}
	}
	return nil
}

func newClientWithConf(ctx context.Context, redisConf config.RedisConfig) (client *redis.Client, err error) {
	option := redis.Options{
		Addr:     redisConf.MasterAddr,
		Password: redisConf.Password,
		DB:       redisConf.DB,
	}
	if redisConf.Tls {
		option.TLSConfig = &tls.Config{
			InsecureSkipVerify: true,
		}
	}
	client = redis.NewClient(&option)
	err = client.Ping(ctx).Err()
	return
}

func MasterRedisClient() *redis.Client {
	if masterRedisClient == nil {
		panic("May have forgotten to initialize Redis client")
	}
	return masterRedisClient
}

func LogQueryRedisClient() *redis.Client {
	if logQueryRedisClient == nil {
		panic("May have forgotten to initialize Redis client")
	}
	return logQueryRedisClient
}
