package redismgr

import (
	"encoding/json"
	"server/common"

	"github.com/gomodule/redigo/redis"
	"github.com/name5566/leaf/log"
)

// 保存用户信息到 Redis 哈希表
func SaveUserInfoToRedis(userData *common.UserData) error {
	// 将用户数据转换为 JSON 字符串
	userDataJson, err := json.Marshal(userData)
	if err != nil {
		log.Debug("Error marshalling user data: %v", err)
		return err
	}

	// 获取 Redis 连接
	conn := GetPool().Get()
	defer conn.Close()

	// 使用 HSET 存储用户数据
	_, err = conn.Do("HSET", "user:"+userData.Id, "data", string(userDataJson))
	if err != nil {
		log.Debug("Error saving user data to Redis: %v", err)
		return err
	}

	// 设置过期时间为3天
	_, err = conn.Do("EXPIRE", "user:"+userData.Id, 86400*3) // 86400*3 = 3天
	if err != nil {
		log.Debug("Error setting expiry for user data in Redis: %v", err)
		return err
	}
	// 进入redis队列存mongodb .
	// UpdateUserInfo(userData)
	log.Debug("User data saved to Redis for userId: %s", userData.Id)
	return nil
}

// 获取用户信息从 Redis 哈希表
func GetUserInfoFromRedis(userId string) (*common.UserData, error) {
	// 获取 Redis 连接
	conn := GetPool().Get()
	defer conn.Close()

	// 从 Redis 获取用户数据
	userDataJson, err := redis.String(conn.Do("HGET", "user:"+userId, "data"))
	if err == redis.ErrNil {
		// 如果 Redis 中没有数据
		log.Debug("User data not found in Redis for userId: %s", userId)
		return nil, nil
	} else if err != nil {
		log.Debug("Error fetching user data from Redis: %v", err)
		return nil, err
	}

	// 将获取到的 JSON 字符串反序列化为 UserData 对象
	var userData common.UserData
	err = json.Unmarshal([]byte(userDataJson), &userData)
	if err != nil {
		log.Debug("Error unmarshalling user data from Redis: %v", err)
		return nil, err
	}

	log.Debug("User data fetched from Redis for userId: %s", userId)
	return &userData, nil
}
