package user

import (
	"server/common"
	mongodbmgr "server/db/mongodb"
	redismgr "server/db/redis"

	"github.com/name5566/leaf/log"
)

// 查找用户信息是否已经存在 Redis 中
func GetUserInfoById(userId string) *common.UserData {
	// 从 Redis 中获取用户数据
	userData, err := redismgr.GetUserInfoFromRedis(userId)
	if err != nil {
		log.Debug("Error fetching user info from Redis:", err)
		return nil
	}

	// 如果 Redis 中有数据，直接返回
	if userData != nil {
		log.Debug("User found in Redis: %s", userId)
		return userData
	}

	// 如果 Redis 中没有数据，检查 MongoDB
	log.Debug("User not found in Redis, checking MongoDB: %s", userId)
	userData, err = redismgr.GetUserInfoFromRedis(userId)
	if err != nil {
		log.Debug("Error fetching user info from MongoDB:", err)
		return nil
	}

	// 如果 MongoDB 中也没有数据，执行新增操作
	if userData == nil {
		log.Debug("User not found in MongoDB, creating new user: %s", userId)
		userData = &common.UserData{
			Id:       userId,
			Nickname: userId, // 或者从请求中获取
			Points:   1000,   // 默认积分
			Room_id:  "0",    // 默认房间ID
		}

		// 保存到 MongoDB 和 Redis
		err = mongodbmgr.AddUser(userData)
		if err != nil {
			log.Debug("Error saving new user to MongoDB:", err)
			return nil
		}

		err = redismgr.SaveUserInfoToRedis(userData)
		if err != nil {
			log.Debug("Error saving new user to Redis:", err)
			return nil
		}
	}

	return userData
}

// 减少用户积分
func DecreaseUserPoint(decrementAmount int32, userId string) {
	userData := GetUserInfoById(userId)
	// 获取存储在 agent 中的 UserData
	// 减少用户积分
	userData.Points -= decrementAmount
	SetUserInfo(userData)
	// 打印更新日志
	log.Debug("User %s's points decreased by %d. New balance: %d", userId, decrementAmount, userData.Points)
}
func SetUserInfo(userData *common.UserData) {
	redismgr.SaveUserInfoToRedis(userData)
}

// 更新用户积分
func AddUserPoint(betAmount int32, userId string) {
	// 查找用户数据
	userData := GetUserInfoById(userId)

	// 更新用户的积分
	userData.Points += betAmount
	SetUserInfo(userData)
	// 打印更新日志
	log.Debug("User %s's points updated: %d", userId, userData.Points)
}
