import logging

from rest_framework.views import exception_handler as drf_exception_handler

logger = logging.getLogger(__name__)


def custom_exception_handler(exc, context):
    response = drf_exception_handler(exc, context)
    if response is not None and response.status_code >= 500:
        logger.exception("DRF 5xx: %s", exc)

    if response is not None:
        detail = response.data
        code = getattr(exc, "default_code", "error")
        if isinstance(detail, list):
            payload = {"error": {"code": code, "message": "Validation error", "detail": detail}}
        elif isinstance(detail, dict) and "detail" in detail and len(detail) == 1:
            message = str(detail["detail"])
            payload = {"error": {"code": code, "message": message, "detail": detail}}
        else:
            payload = {
                "error": {
                    "code": code,
                    "message": str(detail) if not isinstance(detail, dict) else "Request error",
                    "detail": detail,
                }
            }
        response.data = payload
    return response
