import React from 'react';
import ReactDOM from 'react-dom/client';
import App from './App.tsx';
import './index.css';

// Global error/console sanitization shield to prevent circular reference serialization errors in sandbox/IDE
const originalConsoleError = console.error;
const originalConsoleLog = console.log;
const originalConsoleWarn = console.warn;

function safeSanitize(arg: any): any {
  if (arg instanceof Error) {
    return {
      message: arg.message,
      name: arg.name,
      stack: arg.stack,
    };
  }
  if (typeof arg === 'object' && arg !== null) {
    try {
      const seen = new WeakSet();
      const serialized = JSON.stringify(arg, (key, value) => {
        if (typeof value === 'object' && value !== null) {
          if (seen.has(value)) {
            return '[Circular]';
          }
          seen.add(value);
        }
        return value;
      });
      return JSON.parse(serialized);
    } catch (e) {
      return String(arg);
    }
  }
  return arg;
}

console.error = function (...args: any[]) {
  const logStr = args.map(arg => {
    try {
      return typeof arg === 'object' && arg !== null ? JSON.stringify(arg) : String(arg);
    } catch (e) {
      return String(arg);
    }
  }).join(' ');
  if (logStr.includes('Could not reach Cloud Firestore backend') || logStr.includes('code=unavailable') || logStr.includes('@firebase/firestore') || logStr.includes('school profile')) {
    originalConsoleLog.apply(console, ['[Suppressed Firestore Connection Warn]:', ...args]);
    return;
  }
  originalConsoleError.apply(console, args.map(safeSanitize));
};

console.log = function (...args: any[]) {
  originalConsoleLog.apply(console, args.map(safeSanitize));
};

console.warn = function (...args: any[]) {
  const logStr = args.map(arg => {
    try {
      return typeof arg === 'object' && arg !== null ? JSON.stringify(arg) : String(arg);
    } catch (e) {
      return String(arg);
    }
  }).join(' ');
  if (logStr.includes('Could not reach Cloud Firestore backend') || logStr.includes('code=unavailable') || logStr.includes('@firebase/firestore') || logStr.includes('school profile')) {
    originalConsoleLog.apply(console, ['[Suppressed Firestore Connection Warn]:', ...args]);
    return;
  }
  originalConsoleWarn.apply(console, args.map(safeSanitize));
};

// Handle unhandled rejections to prevent circular error objects from crashing the sandbox environment
window.addEventListener('unhandledrejection', (event) => {
  if (event.reason) {
    const msg = event.reason.message || String(event.reason);
    originalConsoleError.call(console, 'Unhandled Promise Rejection:', msg);
    event.preventDefault();
  }
});

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