from rest_framework.views import exception_handler


def api_exception_handler(exc, context):
    response = exception_handler(exc, context)
    if response is None:
        return response

    detail = response.data
    message = "Request failed."
    if isinstance(detail, dict):
        if "detail" in detail:
            message = str(detail["detail"])
        else:
            first = next(iter(detail.values()), None)
            if isinstance(first, list) and first:
                message = str(first[0])
            elif first:
                message = str(first)
    elif isinstance(detail, list) and detail:
        message = str(detail[0])
    else:
        message = str(detail)

    response.data = {
        "success": False,
        "message": message,
        "errors": detail,
    }
    return response
