from rest_framework import permissions

class ContabilidadPermission(permissions.BasePermission):
    """
    Permisos jerárquicos:
    - ADMINISTRADOR o CONTADOR: Acceso total a contabilidad.
    - AUXILIAR: Lectura (GET) en cuentas y reportes. Escritura (POST) solo en asientos.
    """
    
    def has_permission(self, request, view):
        # Si no está autenticado, denegar
        if not request.user or not request.user.is_authenticated:
            return False
            
        perfil = getattr(request.user, 'perfil', None)
        rol = perfil.rol if perfil else 'AUXILIAR'
        
        # Admin y Contador tienen acceso total
        if rol in ['ADMINISTRADOR', 'CONTADOR']:
            return True
            
        # Si es Auxiliar
        if rol == 'AUXILIAR':
            # Permite lectura (GET, HEAD, OPTIONS)
            if request.method in permissions.SAFE_METHODS:
                return True
                
            # Permite creación (POST), edición (PUT, PATCH) y eliminación (DELETE) únicamente en Asientos
            if request.method in ['POST', 'PUT', 'PATCH', 'DELETE']:
                from .views import AsientoViewSet
                if isinstance(view, AsientoViewSet):
                    return True
                    
            return False
            
        return False


class SoloContadorOAdminPermission(permissions.BasePermission):
    """
    Permite acceso únicamente a ADMINISTRADOR o CONTADOR.
    Deniega acceso a AUXILIAR.
    """
    def has_permission(self, request, view):
        if not request.user or not request.user.is_authenticated:
            return False
            
        perfil = getattr(request.user, 'perfil', None)
        rol = perfil.rol if perfil else 'AUXILIAR'
        
        return rol in ['ADMINISTRADOR', 'CONTADOR']
