import {StrictMode} from 'react';
import {createRoot} from 'react-dom/client';
import App from './App.tsx';
import './index.css';

// Global early quota and auth failure listener for Google Maps Platform
(window as any).gm_authFailure = () => {
  window.dispatchEvent(new CustomEvent('gmp-quota-exceeded'));
};
const origError = console.error;
console.error = (...args: unknown[]) => {
  origError.apply(console, args);
  const msg = args.map((a) => String(a)).join(' ');
  if (msg.includes('OverQuotaMapError') || msg.includes('QuotaExceededError')) {
    window.dispatchEvent(new CustomEvent('gmp-quota-exceeded'));
  }
};

import { AuthProvider } from './contexts/AuthContext';
import { HelmetProvider } from 'react-helmet-async';
import { offlineArticleSyncService } from './services/offlineArticleSyncService';
import { csrfService } from './services/csrfService';
import { fontFaceObserverService } from './services/fontFaceObserverService';

// Initialize CSRF protection interceptor for all state-changing API requests
csrfService.init();

// Initialize Font Face Observer to prevent invisible text during initial load and optimize LCP
fontFaceObserverService.init().catch((err) => {
  console.warn('[FontObserver] Initialization note:', err);
});

// Initialize Service Worker for offline research field studies
if (typeof window !== 'undefined') {
  offlineArticleSyncService.init().catch((err) => {
    console.warn('[PWA/ServiceWorker] Initialization notice:', err);
  });
}

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

