# /opt/docker/dev/service_finder/backend/app/core/rbac.py
from fastapi import HTTPException, Depends, status
from app.api.deps import get_current_user
from app.models.identity import User
from app.core.config import settings

class RBAC:
    def __init__(self, required_perm: str = None, min_rank: int = 0):
        self.required_perm = required_perm
        self.min_rank = min_rank

    async def __call__(self, current_user: User = Depends(get_current_user)):
        # 1. Superadmin mindent visz (Rank 100)
        if current_user.role == "superadmin":
            return True

        # 2. Dinamikus rang ellenőrzés a központi rank_map alapján
        role_key = current_user.role.value.upper()  # A DEFAULT_RANK_MAP nagybetűs kulcsokat vár
        user_rank = settings.DEFAULT_RANK_MAP.get(role_key, 0)
        if user_rank < self.min_rank:
            raise HTTPException(
                status_code=status.HTTP_403_FORBIDDEN,
                detail=f"Elégtelen rang. Szükséges szint: {self.min_rank}"
            )

        # 3. Egyedi képességek (capabilities) ellenőrzése
        if self.required_perm:
            user_perms = current_user.custom_permissions.get("capabilities", [])
            if self.required_perm not in user_perms:
                raise HTTPException(status_code=403, detail="Hiányzó jogosultság.")

        return True