// Sentry browser-side init (loaded by @sentry/astro integration).
// Keep PII scrubbing here; the server-side scrubber lives in sentry.server.config.ts
// and src/server/middleware/sentry.ts.

import * as Sentry from '@sentry/astro';

// Read from `globalThis` so we work both under Vite/Astro (import.meta.env) and
// plain Node (process.env) without needing vite/client types.
const env =
  (globalThis as { __MULTIDEAL_SENTRY__?: { dsn?: string; env?: string } }).__MULTIDEAL_SENTRY__ ??
  {};

// Skip init when no DSN is configured (Sentry 10 can throw on empty DSN).
if (env.dsn) {
  Sentry.init({
    dsn: env.dsn,
    environment: env.env ?? 'development',
    tracesSampleRate: 0.1,
    // Never send PII: phone/email/address/display_name/ip are all denylisted.
    beforeSend(event) {
      const deny = ['phone', 'email', 'address', 'display_name', 'ip', 'full_name'];
      const scrub = (obj: unknown): unknown => {
        if (!obj || typeof obj !== 'object') return obj;
        if (Array.isArray(obj)) return obj.map(scrub);
        const out: Record<string, unknown> = {};
        for (const [k, v] of Object.entries(obj as Record<string, unknown>)) {
          out[k] = deny.includes(k) ? '[scrubbed]' : scrub(v);
        }
        return out;
      };
      if (event.request) event.request = scrub(event.request) as typeof event.request;
      if (event.extra) event.extra = scrub(event.extra) as typeof event.extra;
      return event;
    },
  });
}
