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

// Intercept and silence Vite dev server WebSocket/HMR connection errors
try {
  if ((import.meta as any).env?.DEV) {
    const OriginalWebSocket = window.WebSocket;
    if (OriginalWebSocket) {
      // @ts-ignore
      const CustomWebSocket = function (url: string | URL, protocols?: string | string[]) {
        const ws = new OriginalWebSocket(url, protocols);
        ws.addEventListener('error', (e) => {
          const urlStr = url.toString();
          if (
            urlStr.includes('vite') || 
            urlStr.includes('hmr') || 
            urlStr.includes(':3000') || 
            urlStr.includes('websocket')
          ) {
            // Prevent default browser logging and propagation of benign websocket network connection warnings
            e.preventDefault();
            e.stopPropagation();
            e.stopImmediatePropagation();
          }
        });
        return ws;
      };
      // Maintain prototype and static constants
      CustomWebSocket.prototype = OriginalWebSocket.prototype;
      Object.defineProperty(CustomWebSocket, 'CONNECTING', { value: OriginalWebSocket.CONNECTING });
      Object.defineProperty(CustomWebSocket, 'OPEN', { value: OriginalWebSocket.OPEN });
      Object.defineProperty(CustomWebSocket, 'CLOSING', { value: OriginalWebSocket.CLOSING });
      Object.defineProperty(CustomWebSocket, 'CLOSED', { value: OriginalWebSocket.CLOSED });

      // Safely attempt to define the property or assign it
      try {
        Object.defineProperty(window, 'WebSocket', {
          value: CustomWebSocket,
          configurable: true,
          writable: true,
          enumerable: true
        });
      } catch (err) {
        // Fallback standard assignment
        (window as any).WebSocket = CustomWebSocket;
      }
    }
  }
} catch (e) {
  console.warn('Benign notice: Dev server WebSocket interception skipped due to sandbox restrictions:', e);
}

// Catch and suppress unhandled promise rejections
window.addEventListener('unhandledrejection', (event) => {
  console.warn('Gracefully caught unhandled promise rejection:', event.reason);
  event.preventDefault();
});

// Catch and handle other uncaught errors gracefully
window.addEventListener('error', (event) => {
  // Let the error propagate to console but prevent intrusive error boxes if possible
  if (event.error?.message?.includes('websocket') || event.message?.includes('WebSocket')) {
    event.preventDefault();
  }
});

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

