import logging
import uuid

from flask import jsonify, request

logger = logging.getLogger("apex")

_CHAT_PREFIXES = ("/assistant/", "/sales/chat", "/sales/health")


def register_error_handlers(app) -> None:

    @app.errorhandler(Exception)
    def handle_exception(e):
        trace_id = uuid.uuid4().hex[:8]
        logger.error(
            "[%s] Unhandled exception %s %s",
            trace_id, request.method, request.path,
            exc_info=True,
        )
        try:
            from extensions import error_logger as _el
            if _el:
                _el.log_error(trace_id, e, path=request.path, method=request.method)
        except Exception:
            pass
        is_chat = any(request.path.startswith(p) for p in _CHAT_PREFIXES)
        if is_chat:
            return jsonify({
                "answer": "Something went wrong. Please try again.",
                "error": str(e) if app.debug else "internal_error",
                "trace_id": trace_id,
                "tool_used": None,
                "data": [],
            }), 500
        return jsonify({
            "error": "internal_error",
            "trace_id": trace_id,
            "detail": str(e) if app.debug else None,
        }), 500

    @app.errorhandler(404)
    def handle_404(e):
        return jsonify({"error": "not_found"}), 404

    @app.errorhandler(429)
    def handle_ratelimit(e):
        return jsonify({
            "error": "rate_limited",
            "message": str(e.description),
        }), 429
