package qznn

import (
	"fmt"
	"sync"
	"time"

	"github.com/patrickmn/go-cache"
	"gogs.daxia.dev/huanan/pkg.daxia.dev/parse"
)

var onlinUserCache *cache.Cache
var onlinUserCacheLocker = sync.Mutex{}

func getCacheInstance() *cache.Cache {
	onlinUserCacheLocker.Lock()
	defer onlinUserCacheLocker.Unlock()

	if onlinUserCache != nil {
		return onlinUserCache
	}

	onlinUserCache = cache.New(1*time.Minute, 2*time.Minute)
	onlinUserCache.OnEvicted(func(name string, val interface{}) {
		game := GetInstance()
		game.Leave(int32(parse.StringToInt64(name)))
	})

	return onlinUserCache
}

func UserIsOnline(userID uint) bool {
	_, exists := getCacheInstance().Get(fmt.Sprintf("%d", userID))
	return exists
}

func UserActive(userID uint) {
	getCacheInstance().Set(fmt.Sprintf("%d", userID), 1, cache.DefaultExpiration)
}

func UserUnActive(userID uint) {
	getCacheInstance().Delete(fmt.Sprintf("%d", userID))
}
