import { StrictMode } from 'react';
import { createRoot } from 'react-dom/client';
import { App } from './App';
import { SnackbarHost } from './ui/Snackbar';
import { initTracking } from './tracking';
import { initAnalytics } from './analytics';
import { captureAttributionEntry } from './attribution';
import './theme.css';
import './ui/shell.css';

initAnalytics();
// Antes del render: la primera URL de la sesión (utm/click ids) es la de la compra.
captureAttributionEntry();

createRoot(document.getElementById('root')!).render(
  <StrictMode>
    <SnackbarHost>
      <App />
    </SnackbarHost>
  </StrictMode>,
);

initTracking();

// Fingerprint de Signifyd desde la entrada, no recién al abrir el formulario de
// tarjeta: puntúa mejor cuanto más recorrido observa (la app lo carga al
// iniciar). Después del `load` + idle e import dinámico, para no competir con
// la API ni engordar el bundle de entrada. El id queda en sessionStorage y es
// el mismo que después mandan MpCardForm / DlocalCardForm.
{
  const start = () => {
    const idle = (window as unknown as { requestIdleCallback?: (cb: () => void) => void }).requestIdleCallback;
    const run = () => {
      import('./payments/thirdParty').then((m) => m.signifydSessionId()).catch(() => undefined);
    };
    if (idle) idle(run);
    else window.setTimeout(run, 2500);
  };
  if (document.readyState === 'complete') start();
  else window.addEventListener('load', start, { once: true });
}

// Marca la entrada de historial como propia de la landing: goBack() usa
// esto (además del referrer) para saber si hay una página previa nuestra.
try {
  history.replaceState({ ...(history.state || {}), landing: true }, '');
} catch {
  /* sin historial */
}
