from typing import Final

SUPER_ADMIN: Final = "SUPER_ADMIN"
ADMIN: Final = "ADMIN"
SR_CONSULTANT: Final = "SR_CONSULTANT"
CONSULTANT: Final = "CONSULTANT"

# Ordered highest-to-lowest privilege — a caller may only assign a role_key strictly
# below their own position in this list.
ROLE_KEY_HIERARCHY: Final = (SUPER_ADMIN, ADMIN, SR_CONSULTANT, CONSULTANT)

# Role keys that may manage staff/roles/departments — Super Admin included, since it
# outranks Admin in the hierarchy above rather than sitting outside it.
ADMIN_ROLE_KEYS: Final = (SUPER_ADMIN, ADMIN)


def get_assignable_role_keys(current_role_key: str) -> list[str]:
    if current_role_key not in ROLE_KEY_HIERARCHY:
        return []
    rank = ROLE_KEY_HIERARCHY.index(current_role_key)
    return list(ROLE_KEY_HIERARCHY[rank + 1:])
