from __future__ import annotations

from app.domain.auth import PermissionContext


def build_permission_context(
    role_name: str | None,
    domain_permissions: list[str],
) -> PermissionContext:
    """Translate Directus role/group permissions into product capabilities.

    We keep the first version intentionally explicit instead of clever:
    reviewers can see exactly which strings unlock which capabilities.
    """

    normalized = {permission.strip().lower() for permission in domain_permissions if permission}
    role_normalized = (role_name or "").strip().lower()
    is_admin = role_normalized in {"administrator", "admin"}

    def has_any(*values: str) -> bool:
        return is_admin or any(value in normalized for value in values)

    return PermissionContext(
        is_admin=is_admin,
        can_manage_sites=has_any("sites.manage", "sites.write"),
        can_manage_experiments=has_any("experiments.manage", "experiments.write"),
        can_manage_variants=has_any("variants.manage", "variants.write"),
        can_manage_releases=has_any("releases.manage", "releases.write"),
        can_manage_goals=has_any("goals.manage", "goals.write"),
        can_manage_sdk_configs=has_any("sdk_configs.manage", "sdk_configs.write"),
        can_use_editor=has_any("editor.manage", "editor.use"),
        can_read_runtime=has_any("runtime.read", "runtime.manage"),
        raw_permissions=sorted(normalized),
    )

