// Web Vitals 上报（P6-1）
// 依据：02-architecture-design.md §12 可观测性
// - 采集 CLS / LCP / FID / FCP / TTFP / INP
// - 上报到 /api/v1/parent/web-vitals（经 api-gateway → data-ana）
// - 开发环境输出到 console

"use client";

interface WebVitalMetric {
  name: string;
  value: number;
  rating: "good" | "needs-improvement" | "poor";
  delta: number;
  id: string;
}

const REPORT_URL = "/api/v1/parent/web-vitals";

export async function reportWebVitals(metric: WebVitalMetric): Promise<void> {
  if (process.env.NODE_ENV === "development") {
    // 开发环境输出到 console
    console.debug(
      `[Web Vitals] ${metric.name}: ${metric.value} (${metric.rating})`,
    );
  }

  // 生产环境上报
  if (process.env.NODE_ENV === "production") {
    try {
      const body = {
        name: metric.name,
        value: metric.value,
        rating: metric.rating,
        delta: metric.delta,
        id: metric.id,
        page: window.location.pathname,
        ts: Date.now(),
      };

      // 使用 sendBeacon 优先（页面卸载时不丢失）
      if (navigator.sendBeacon) {
        const blob = new Blob([JSON.stringify(body)], {
          type: "application/json",
        });
        navigator.sendBeacon(REPORT_URL, blob);
      } else {
        fetch(REPORT_URL, {
          method: "POST",
          body: JSON.stringify(body),
          headers: { "Content-Type": "application/json" },
          keepalive: true,
        }).catch(() => {
          // 上报失败静默忽略
        });
      }
    } catch {
      // 忽略
    }
  }
}
