from rest_framework import status
from rest_framework.exceptions import ValidationError as DRFValidationError
from rest_framework.views import exception_handler

HTTP_422_UNPROCESSABLE_ENTITY = getattr(status, "HTTP_422_UNPROCESSABLE_ENTITY", 422)


def custom_exception_handler(exc, context):
    response = exception_handler(exc, context)

    if response is None:
        return response

    if isinstance(exc, DRFValidationError) and response.status_code == status.HTTP_400_BAD_REQUEST:
        response.status_code = HTTP_422_UNPROCESSABLE_ENTITY

    if isinstance(response.data, list):
        response.data = {"detail": "Error de validación.", "errors": response.data}
        return response

    if isinstance(response.data, dict):
        if "detail" in response.data and len(response.data) == 1:
            response.data = {"detail": response.data["detail"]}
        else:
            response.data = {"detail": "Error de validación.", "errors": response.data}

    return response
