from rest_framework.views import exception_handler


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

    if response.status_code == 400:
        code = "INVALID_PARAMETER"
        if isinstance(response.data, dict):
            detail = response.data.get("detail")
            if detail:
                message = str(detail)
            else:
                first = next(iter(response.data.values()), "Invalid request.")
                message = str(first[0] if isinstance(first, list) and first else first)
        else:
            message = str(response.data)
    elif response.status_code == 401:
        code, message = "UNAUTHORIZED", "Missing or invalid API key."
    elif response.status_code == 404:
        code, message = "NOT_FOUND", "Resource does not exist."
    elif response.status_code == 429:
        code, message = "RATE_LIMIT_EXCEEDED", "Rate limit exceeded."
    else:
        code, message = "INTERNAL_SERVER_ERROR", "Internal server error."

    response.data = {
        "success": False,
        "data": None,
        "error": {"code": code, "message": message},
    }
    return response
