from my_modules.decoratory.header import format_response, feature_flag_required
from my_modules.app.setup import LIMITER
from my_modules.app.logger import logger
from quart_common.web.wide_event import add_wide_event_context

from quart import Blueprint, current_app

health_bp = Blueprint("health", __name__)

@health_bp.route("/convex", methods=["GET"])
@LIMITER.limit("30 per minute")
@feature_flag_required("convex_health", fallback=False, status_code=404)
@format_response
async def get_convex_health_for_api():
  add_wide_event_context(health={"check": "convex"})
  runtime = getattr(current_app, "convex_runtime", None)
  if runtime is None:
    add_wide_event_context(health={"status": "unavailable", "reason": "runtime_missing"})
    return {
      "status": "unavailable",
      "description": "Convex runtime is not attached to app",
    }, 503

  is_alive = await runtime.is_alive()
  metrics = runtime.get_metrics()
  add_wide_event_context(health={"status": "ok" if is_alive else "unhealthy"})

  return {
    "alive": is_alive,
    "metrics": metrics,
  }, 200 if is_alive else 503
