from rest_framework.views import exception_handler as drf_exception_handler

from django.core.exceptions import PermissionDenied
from django.http import Http404
from django.utils import six

from misago.core.exceptions import Banned


def handle_api_exception(exception, context):
    response = drf_exception_handler(exception, context)
    if response:
        if isinstance(exception, Banned):
            response.data = exception.ban.get_serialized_message()
        elif isinstance(exception, PermissionDenied) and exception.args:
            response.data = {
                'detail': six.text_type(exception),
            }
        elif isinstance(exception, Http404):
            response.data = {
                'detail': six.text_type(exception) or "NOT FOUND",
            }
        return response
    else:
        return None