namespace ET.Server
{
    [FriendOf(typeof(GameTokenInfoComponent))]
    public static class GameTokenInfoComponentSystem
    {
        public static void Add(this GameTokenInfoComponent self, string token, long userId)
        {
            self.tokenInfo.Add(token, userId);
            self.TimeoutRemoveKey(token).Coroutine();
        }

        public static long Get(this GameTokenInfoComponent self, string token)
        {
            long userId = 0;
            self.tokenInfo.TryGetValue(token, out userId);
            return userId;
        }

        public static void Remove(this GameTokenInfoComponent self, string token)
        {
            self.tokenInfo.Remove(token);
        }

        private static async ETTask TimeoutRemoveKey(this GameTokenInfoComponent self, string token)
        {
            await TimerComponent.Instance.WaitAsync(20000);
            self.tokenInfo.Remove(token);
        }
    }
}