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)