from rest_framework import permissions


class IsSuperAdmin(permissions.BasePermission):
    """Permission check for Super Admin"""
    def has_permission(self, request, view):
        return (
            request.user and
            request.user.is_authenticated and
            request.user.role == 'super_admin'
        )


class IsAdmin(permissions.BasePermission):
    """Permission check for Admin or Super Admin"""
    def has_permission(self, request, view):
        return (
            request.user and
            request.user.is_authenticated and
            request.user.role in ['admin', 'super_admin']
        )


class IsPlaceAdmin(permissions.BasePermission):
    """Permission check for Place Admin, Admin, or Super Admin"""
    def has_permission(self, request, view):
        return (
            request.user and
            request.user.is_authenticated and
            request.user.role in ['place_admin', 'admin', 'super_admin']
        )


class IsPlaceOwner(permissions.BasePermission):
    """Permission check for Place Owner (Place Admin of the specific place)"""
    def has_object_permission(self, request, view, obj):
        # Check if user is the owner of the place
        if hasattr(obj, 'place'):
            place = obj.place
        elif hasattr(obj, 'owner'):
            place = obj
        else:
            return False
        
        # Super Admin and Admin have full access
        if request.user.role in ['super_admin', 'admin']:
            return True
        
        # Check if user is Place Admin of this place
        if request.user.role == 'place_admin':
            return hasattr(request.user, 'place_admin_profile') and \
                   request.user.place_admin_profile.place == place
        
        return False

