import traceback

from django.shortcuts import render
from django.utils.translation import gettext as _


def error(request, context, status):
    return render(request, "error.html", context=context, status=status)


def error404(request, exception=None):
    # TODO: "panic: go back"
    return render(
        request,
        "generic-message.html",
        {
            "title": _("404 error"),
            "message": _('Could not find page "%s"') % request.path,
        },
        status=404,
    )


def error403(request, exception=None):
    return error(
        request,
        {
            "id": "unauthorized_access",
            "description": _("no permission for %s") % request.path,
            "code": 403,
        },
        403,
    )


def error500(request):
    return error(
        request,
        {
            "id": "invalid_state",
            "description": _("corrupt page %s") % request.path,
            "traceback": traceback.format_exc(),
            "code": 500,
        },
        500,
    )