from cacheout import Cache
from flask_login import UserMixin, login_user, LoginManager, logout_user

cache = Cache(maxsize=5000, ttl=8 * 3600)
login_manager = LoginManager()
login_manager.login_view = "home.login_page"


class User(UserMixin):
    def __init__(self, id, name, password, email, admin=False, groups=None, sys_config=None):
        self.id = id
        self.name = name
        self.password = password
        self.email = email
        self.admin = admin
        self.groups = groups or []
        self.sys_config = sys_config or {}

    def __repr__(self):
        return self.name

    @property
    def is_admin(self):
        return self.admin


def init_app(app):
    login_manager.init_app(app)


def user_login(user):
    login_user(user, remember=True)
    cache.set(user.get_id(), user)


def user_logout():
    logout_user()


@login_manager.user_loader
def load_user(user_id):
    return cache.get(user_id)
