import React from 'react';
import ReactDOM from 'react-dom/client';

// Prevent SecurityError in sandboxed iframes with blocked storage/cookies
try {
  const testKey = '__storage_test__';
  window.localStorage.setItem(testKey, testKey);
  window.localStorage.removeItem(testKey);
} catch (e) {
  console.warn('⚠️ [Storage Shield] LocalStorage is restricted/blocked in this sandbox. Injecting robust, in-memory fallback store:', e);
  const mockStore: Record<string, string> = {};
  const inMemoryStorage = {
    getItem: (key: string): string | null => {
      return key in mockStore ? mockStore[key] : null;
    },
    setItem: (key: string, value: string): void => {
      mockStore[key] = String(value);
    },
    removeItem: (key: string): void => {
      delete mockStore[key];
    },
    clear: (): void => {
      for (const k in mockStore) {
        delete mockStore[k];
      }
    },
    key: (index: number): string | null => {
      return Object.keys(mockStore)[index] || null;
    },
    get length(): number {
      return Object.keys(mockStore).length;
    }
  };

  try {
    Object.defineProperty(window, 'localStorage', {
      value: inMemoryStorage,
      writable: true,
      configurable: true
    });
  } catch (propError) {
    console.error('⚠️ Could not override window.localStorage directly:', propError);
  }
}

import App from './App.tsx';
import './index.css';
import { validateEnvironment } from './lib/env/validate.ts';
import { sentry } from './lib/sentry.ts';
import { monitor } from './lib/monitoring.ts';
import { analytics } from './lib/analytics.ts';
import { ErrorBoundary } from './components/ErrorBoundary.tsx';

// Run environmental system check
validateEnvironment();

// Initialize enterprise telemetry and monitoring
sentry.init();
monitor.monitorWebVitals();
analytics.init();

// Register Service Worker for offline capabilities (Progressive Web App support)
if ('serviceWorker' in navigator) {
  window.addEventListener('load', () => {
    navigator.serviceWorker.register('/sw.js')
      .then((registration) => {
        console.log('✅ [PWA] Service Worker registered with scope:', registration.scope);
      })
      .catch((error) => {
        console.error('❌ [PWA] Service Worker registration failed:', error);
      });
  });
}

const renderApp = () => {
  const rootElement = document.getElementById('root');
  if (rootElement) {
    ReactDOM.createRoot(rootElement).render(
      <React.StrictMode>
        <ErrorBoundary>
          <App />
        </ErrorBoundary>
      </React.StrictMode>
    );
  } else {
    console.error("❌ Failed to find the root element ('root') to mount the React application.");
  }
};

if (document.readyState === 'loading') {
  document.addEventListener('DOMContentLoaded', renderApp);
} else {
  renderApp();
}

