from enum import Enum
from typing import List


class UserRole(str, Enum):
    SUPER_ADMIN = "super_admin"
    TENANT_ADMIN = "tenant_admin"
    TENANT_USER = "tenant_user"


ROLE_PERMISSIONS = {
    UserRole.SUPER_ADMIN: [
        "tenants:read", "tenants:write", "tenants:delete",
        "users:read", "users:write", "users:delete",
        "devices:read", "devices:write", "devices:delete",
        "alerts:read", "alerts:write", "alerts:delete",
        "settings:read", "settings:write",
        "analytics:read",
    ],
    UserRole.TENANT_ADMIN: [
        "users:read", "users:write",
        "devices:read", "devices:write",
        "alerts:read", "alerts:write", "alerts:delete",
        "settings:read", "settings:write",
        "analytics:read",
    ],
    UserRole.TENANT_USER: [
        "devices:read",
        "alerts:read",
        "analytics:read",
    ],
}


def has_permission(role: UserRole, permission: str) -> bool:
    return permission in ROLE_PERMISSIONS.get(role, [])


def get_permissions(role: UserRole) -> List[str]:
    return ROLE_PERMISSIONS.get(role, [])


class PermissionChecker:
    def __init__(self, required_permissions: List[str]):
        self.required_permissions = required_permissions
    
    def check(self, role: UserRole) -> bool:
        user_permissions = get_permissions(role)
        return all(perm in user_permissions for perm in self.required_permissions)
