import { NextResponse } from 'next/server';

import { logger } from '@/lib/logger';

/**
 * Ingest Core Web Vitals from the client. Called via `navigator.sendBeacon`
 * from `WebVitalsReporter` so it survives page unload. Body shape matches
 * the `Metric` type from `web-vitals` v4.
 *
 * For now we log structured to pino - once we have a perf-tracking table
 * (or external aggregator) wired, this can persist instead. The key value
 * today is establishing the baseline before optimisation work.
 */
export async function POST(req: Request) {
  let body: unknown;
  try {
    body = await req.json();
  } catch {
    return NextResponse.json({ error: 'invalid json' }, { status: 400 });
  }

  if (!body || typeof body !== 'object') {
    return NextResponse.json({ error: 'invalid body' }, { status: 400 });
  }

  const m = body as {
    name?: string;
    value?: number;
    rating?: 'good' | 'needs-improvement' | 'poor';
    id?: string;
    delta?: number;
    navigationType?: string;
    path?: string;
  };

  if (typeof m.name !== 'string' || typeof m.value !== 'number') {
    return NextResponse.json({ error: 'missing name/value' }, { status: 400 });
  }

  logger.info(
    {
      vital: m.name,
      value: m.value,
      rating: m.rating ?? null,
      id: m.id ?? null,
      delta: m.delta ?? null,
      navigationType: m.navigationType ?? null,
      path: m.path ?? null,
    },
    'web-vital',
  );

  return new NextResponse(null, { status: 204 });
}
