from django.core.paginator import Paginator
from django.db.models import Q
from django.shortcuts import render

from core.decorators import capability_required
from core.models import AuditLog
from core.permissions import Capability


def error_403(request, exception=None):
    return render(request, '403.html', status=403)


def error_404(request, exception=None):
    return render(request, '404.html', status=404)


@capability_required(Capability.AUDIT_VIEW)
def audit_log_list(request):
    logs = AuditLog.objects.select_related("actor").all()

    query = request.GET.get("q")
    if query:
        logs = logs.filter(
            Q(object_repr__icontains=query)
            | Q(object_id__icontains=query)
            | Q(actor__username__icontains=query)
        )

    action = request.GET.get("action")
    if action:
        logs = logs.filter(action=action)

    model = request.GET.get("model")
    if model:
        logs = logs.filter(model_name=model)

    paginator = Paginator(logs, 50)
    page = request.GET.get("page")
    logs_page = paginator.get_page(page)

    return render(
        request,
        "core/audit_log_list.html",
        {
            "logs": logs_page,
            "query": query or "",
            "current_action": action or "",
            "current_model": model or "",
            "actions": AuditLog.Action.choices,
        },
    )
