import logging

from app.classes.models.crafty_permissions import (
    PermissionsCrafty,
    EnumPermissionsCrafty,
)
from app.classes.models.users import ApiKeys

logger = logging.getLogger(__name__)


class CraftyPermsController:
    @staticmethod
    def list_defined_crafty_permissions():
        permissions_list = PermissionsCrafty.get_permissions_list()
        return permissions_list

    @staticmethod
    def get_mask_crafty_permissions(user_id):
        permissions_mask = PermissionsCrafty.get_crafty_permissions_mask(user_id)
        return permissions_mask

    @staticmethod
    def set_permission(
        permission_mask, permission_tested: EnumPermissionsCrafty, value
    ):
        return PermissionsCrafty.set_permission(
            permission_mask, permission_tested, value
        )

    @staticmethod
    def can_create_server(user_id):
        return PermissionsCrafty.can_add_in_crafty(
            user_id, EnumPermissionsCrafty.SERVER_CREATION
        )

    @staticmethod
    def can_add_user(user_id):
        return PermissionsCrafty.can_add_in_crafty(
            user_id, EnumPermissionsCrafty.USER_CONFIG
        )

    @staticmethod
    def can_add_role(user_id):
        return PermissionsCrafty.can_add_in_crafty(
            user_id, EnumPermissionsCrafty.ROLES_CONFIG
        )

    @staticmethod
    def list_all_crafty_permissions_quantity_limits():
        return PermissionsCrafty.get_all_permission_quantity_list()

    @staticmethod
    def list_crafty_permissions_quantity_limits(user_id):
        return PermissionsCrafty.get_permission_quantity_list(user_id)

    @staticmethod
    def get_crafty_permissions_list(user_id):
        permissions_mask = PermissionsCrafty.get_crafty_permissions_mask(user_id)
        permissions_list = PermissionsCrafty.get_permissions(permissions_mask)
        return permissions_list

    @staticmethod
    def add_server_creation(user_id):
        """Increase the "Server Creation" counter for this user

        Args:
            user_id (int): The modifiable user's ID

        Returns:
            int: The new count of servers created by this user
        """
        return PermissionsCrafty.add_server_creation(user_id)

    @staticmethod
    def add_user_creation(user_id):
        return PermissionsCrafty.add_user_creation(user_id)

    @staticmethod
    def add_role_creation(user_id):
        return PermissionsCrafty.add_role_creation(user_id)

    @staticmethod
    def get_api_key_permissions_list(key: ApiKeys):
        return PermissionsCrafty.get_api_key_permissions_list(key)
