"""
Права доступа для расписания.
"""
from rest_framework import permissions


class IsLessonParticipant(permissions.BasePermission):
    """Проверка, является ли пользователь участником занятия."""
    
    def has_object_permission(self, request, view, obj):
        """Проверка прав на объект занятия."""
        # Админы имеют полный доступ
        if request.user.is_staff or request.user.is_superuser:
            return True
        
        # Ментор занятия имеет полный доступ
        if obj.mentor == request.user:
            return True
        
        # Клиент занятия имеет доступ на чтение
        try:
            if obj.client.user == request.user:
                return request.method in permissions.SAFE_METHODS
        except:
            pass
        
        # Родитель клиента имеет доступ на чтение
        try:
            if request.user.role == 'parent':
                parent_children = request.user.parent_profile.children.all()
                if obj.client in parent_children:
                    return request.method in permissions.SAFE_METHODS
        except:
            pass
        
        return False


class IsMentorOrReadOnly(permissions.BasePermission):
    """Только менторы могут создавать/редактировать, остальные только читать."""
    
    def has_permission(self, request, view):
        """Проверка общих прав."""
        if request.method in permissions.SAFE_METHODS:
            return True
        
        return request.user.role == 'mentor'
    
    def has_object_permission(self, request, view, obj):
        """Проверка прав на объект."""
        if request.method in permissions.SAFE_METHODS:
            return True
        
        # Только создатель (ментор) может редактировать/удалять
        return obj.mentor == request.user or request.user.is_staff

