package dao

import (
	"context"
	"fmt"
	"time"

	"github.com/assimon/luuu/util/log"
	"github.com/go-redis/redis/v8"
	"github.com/gookit/color"
	"github.com/spf13/viper"
)

var Rdb *redis.Client

func RedisInit() error {
	options := redis.Options{
		Addr: fmt.Sprintf(
			"%s:%s",
			viper.GetString("redis_host"),
			viper.GetString("redis_port")), // Redis地址
		DB:          viper.GetInt("redis_db"),                                        // Redis库
		PoolSize:    viper.GetInt("redis_pool_size"),                                 // Redis连接池大小
		MaxRetries:  viper.GetInt("redis_max_retries"),                               // 最大重试次数
		IdleTimeout: time.Second * time.Duration(viper.GetInt("redis_idle_timeout")), // 空闲链接超时时间
	}
	if viper.GetString("redis_passwd") != "" {
		options.Password = viper.GetString("redis_passwd")
	}
	Rdb = redis.NewClient(&options)
	ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
	defer cancel()
	pong, err := Rdb.Ping(ctx).Result()
	if err == redis.Nil {
		log.Sugar.Debug("[store_redis] Nil reply returned by Rdb when key does not exist.")
	} else if err != nil {
		color.Red.Printf("[store_redis] redis connRdb err,err=%s", err)
		// panic(err)
		// time.Sleep(10 * time.Second)
		// RedisInit()
		return err
	} else {
		log.Sugar.Debug("[store_redis] redis connRdb success,suc=%s", pong)
	}
	return nil
}
