package redis

import (
	"context"

	log "github.com/sirupsen/logrus"
	"github.com/spf13/viper"

	"github.com/pingcap-inc/it-automation/internal/pkg/options"
	"github.com/pingcap-inc/it-automation/pkg/storage"
)

type Redis struct {
}

func (r *Redis) InitRedisStore() {
	ctx := context.Background()
	redisOptions := options.NewRedisOptions()
	var option struct {
		RedisOption *options.RedisOptions `mapstructure:"redis"`
	}
	option.RedisOption = redisOptions
	err := viper.Unmarshal(&option)
	if err != nil {
		log.Fatalf("failed to init unmarshal redis option :%v", err)
	}
	config := &storage.Config{
		Host:                  redisOptions.Host,
		Port:                  redisOptions.Port,
		Addrs:                 redisOptions.Addrs,
		MasterName:            redisOptions.MasterName,
		Username:              redisOptions.Username,
		Password:              redisOptions.Password,
		Database:              redisOptions.Database,
		MaxIdle:               redisOptions.MaxIdle,
		MaxActive:             redisOptions.MaxActive,
		Timeout:               redisOptions.Timeout,
		EnableCluster:         redisOptions.EnableCluster,
		UseSSL:                redisOptions.UseSSL,
		SSLInsecureSkipVerify: redisOptions.SSLInsecureSkipVerify,
	}

	// try to connect to redis
	go storage.ConnectToRedis(ctx, config)
}

func (r *Redis) GetRedis(prefix string) *storage.RedisCluster {
	return &storage.RedisCluster{KeyPrefix: prefix}
}
