from django.shortcuts import render

from .models import HorarioLaboral
from .permisos import debe_respetar_horario_laboral

RUTAS_EXCLUIDAS = ('/login/', '/logout/', '/admin/', '/static/', '/media/')


class HorarioLaboralMiddleware:
    """Meseros y cajeros solo pueden abrir la app dentro del horario laboral
    configurado por un administrador (HorarioLaboral). Los administradores
    (superusuarios) nunca se ven afectados."""

    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
        user = getattr(request, 'user', None)
        if (
            user is not None and user.is_authenticated
            and debe_respetar_horario_laboral(user)
            and not request.path.startswith(RUTAS_EXCLUIDAS)
        ):
            horario = HorarioLaboral.get_solo()
            if not horario.dentro_de_horario():
                return render(request, 'ventas/fuera_de_horario.html', {'horario': horario}, status=403)
        return self.get_response(request)
