/**
 * Fire-and-forget Fehler-Reporting vom Browser zum Server, analog zum
 * bestehenden Tracking-Muster (trackOutboundClick in match-overlay.tsx /
 * swipe-card-stack.tsx). navigator.sendBeacon wird bevorzugt, damit der
 * Report auch bei sofortigem Seiten-Wechsel/Absturz noch zuverlaessig
 * abgeschickt wird. Ein Fehlschlag beim Reporten selbst darf den
 * eigentlichen Nutzerfluss niemals stoeren - deshalb alles in try/catch.
 */
export function logClientError(
  message: string,
  context?: Record<string, unknown>,
  sessionCode?: string,
) {
  if (typeof window === 'undefined') return;
  try {
    const payload = JSON.stringify({
      message,
      context: context ? JSON.stringify(context) : undefined,
      url: window.location.href,
      sessionCode,
    });
    if (navigator.sendBeacon) {
      const blob = new Blob([payload], { type: 'application/json' });
      navigator.sendBeacon('/api/client-error', blob);
    } else {
      fetch('/api/client-error', {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: payload,
        keepalive: true,
      }).catch(() => {});
    }
  } catch {
    // Reporting darf den eigentlichen Nutzerfluss niemals stoeren.
  }
}
