package game

import (
	"common/cache"
	"common/connection"
	"goutil/logUtilPlus"
	"sync"
	. "usercenter/internal/user"
)

// 包名称（功能名称）
var packageName = "game"

// 读写锁
var lock sync.RWMutex

func AddGame(user *User, game *Game) (int64, error) {

	//处理一些验证

	//判断缓存是否存在
	gameMap, _ := cache.GetData[map[int64]*Game](user.Cache, packageName)
	if gameMap == nil {
		gameMap = make(map[int64]*Game)
	}

	//添加新的缓存
	func() {
		lock.Lock()
		defer lock.Unlock()
		gameMap[game.GameID] = game
	}()

	//写入缓存
	cache.SetData(user.Cache, packageName, gameMap)

	// 写入到数据库
	result := connection.GetUserDB().Create(&game) // 通过数据的指针来创建

	if result.Error != nil {
		logUtilPlus.ErrorLog("添加用户失败 错误信息：", result.Error.Error())
	}
	return game.GameID, nil
}

// 获取有些列表
func GetGameList(user *User) (map[int64]*Game, error) {

	//处理一些验证

	//验证缓存
	gameMap, _ := cache.GetData[map[int64]*Game](user.Cache, packageName)
	if gameMap != nil {
		return gameMap, nil
	}

	// 获取全部列表
	var gameList []*Game
	result := connection.GetUserDB().Find(&gameList) // 通过数据的指针来创建

	if result.Error != nil {
		logUtilPlus.ErrorLog("添加用户失败 错误信息：", result.Error.Error())
	}

	for _, game := range gameList {
		gameMap[game.GameID] = game
	}

	//添加缓存
	func() {
		lock.Lock()
		defer lock.Unlock()
		cache.SetData(user.Cache, packageName, gameMap)
	}()

	return gameMap, nil
}
