'use client'

import { useEffect } from 'react'

/**
 * Captures unhandled client-side errors and forwards them to the server
 * so they appear in `docker logs memento-web`. Loaded in the root layout.
 */
export function ErrorReporter() {
  useEffect(() => {
    function report(payload: object) {
      fetch('/api/debug/client-error', {
        method: 'POST',
        headers: { 'Content-Type': 'application/json' },
        body: JSON.stringify(payload),
        keepalive: true,
      }).catch(() => {})
    }

    function onError(event: ErrorEvent) {
      report({
        type: 'uncaught-error',
        message: event.message,
        filename: event.filename,
        lineno: event.lineno,
        colno: event.colno,
        stack: event.error?.stack ?? null,
        url: window.location.href,
        timestamp: new Date().toISOString(),
      })
    }

    function onUnhandledRejection(event: PromiseRejectionEvent) {
      const reason = event.reason
      report({
        type: 'unhandled-rejection',
        message: reason?.message ?? String(reason),
        stack: reason?.stack ?? null,
        url: window.location.href,
        timestamp: new Date().toISOString(),
      })
    }

    window.addEventListener('error', onError)
    window.addEventListener('unhandledrejection', onUnhandledRejection)
    return () => {
      window.removeEventListener('error', onError)
      window.removeEventListener('unhandledrejection', onUnhandledRejection)
    }
  }, [])

  return null
}
