/**
 * Sentry — error monitoring + replay côté SPA.
 *
 * Init au plus tôt dans main.tsx (avant tout autre import non-essentiel)
 * pour capturer même les erreurs de bootstrap (incluant les validations
 * d'env qui throw dans lib/env.ts).
 *
 * Lit `import.meta.env` directement plutôt que via lib/env.ts pour ne pas
 * dépendre de la validation Zod qui peut elle-même throw.
 *
 * Si VITE_SENTRY_DSN_WEB n'est pas défini, Sentry est no-op.
 *
 * Cf. ADR-024 — choix Sentry SaaS, free tier, project rubis-web.
 */

import * as Sentry from "@sentry/react";

const dsn = import.meta.env.VITE_SENTRY_DSN_WEB as string | undefined;

if (dsn) {
  Sentry.init({
    dsn,
    environment: import.meta.env.MODE,
    release: (import.meta.env.VITE_APP_VERSION as string | undefined) ?? "dev",
    // 10% en prod, 100% en dev pour debug
    tracesSampleRate: import.meta.env.PROD ? 0.1 : 1.0,
    // Pas de replay sur sessions sans erreur (économie de quota free tier)
    replaysSessionSampleRate: 0,
    // Replay systématique quand une erreur se produit — capture les 30s
    // précédant le crash pour debug post-mortem
    replaysOnErrorSampleRate: 1.0,
    integrations: [
      Sentry.browserTracingIntegration(),
      Sentry.replayIntegration({
        maskAllText: true,
        blockAllMedia: true,
      }),
    ],
  });
}

export { Sentry };
