import random
import string
from datetime import timedelta

from expiringdictx import ExpiringDict


class TokenManager:
    def __init__(self):
        self.token_manager = ExpiringDict[str, tuple](capacity=100, default_age=timedelta(minutes=10))

    def get_user(self, token: str) -> tuple | None:
        res = self.token_manager.get(token)
        assert res is None or isinstance(res, tuple)
        return res

    def save_user(self, token: str, qq: tuple) -> None:
        self.token_manager[token] = qq

    def get_user_token(self, qq: tuple) -> str:
        token = "".join(random.choices(string.ascii_letters + string.digits, k=16))
        self.save_user(token, qq)
        return token


token_manager = TokenManager()