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

// Safely catch uncaught promise rejections or external service quota errors
if (typeof window !== 'undefined') {
  window.addEventListener('unhandledrejection', (event) => {
    console.warn('Captured unhandled promise rejection:', event.reason);
    event.preventDefault();
  });
  window.addEventListener('error', (event) => {
    console.warn('Captured window error:', event.message || event.error);
    // Display error visually if in iframe and it crashes entirely
    const rootEl = document.getElementById('root');
    if (rootEl && rootEl.innerHTML === '') {
      rootEl.innerHTML = `<div style="padding: 20px; color: red; background: #fff;"><h3>Critical Error</h3><pre>${event.error?.stack || event.message}</pre></div>`;
    }
  });
}

// Global exposure for JS Widget Shadow DOM Mount
(window as any).mountRevOrderWidget = (container: HTMLElement, shadowRoot: ShadowRoot, workshopId: string) => {
  createRoot(container).render(
    <StrictMode>
      <App isShadowWidget={true} workshopId={workshopId} shadowRoot={shadowRoot} />
    </StrictMode>
  );
};

const rootEl = document.getElementById('root');
if (rootEl) {
  try {
    createRoot(rootEl).render(
      <StrictMode>
        <App />
      </StrictMode>
    );
  } catch (e) {
    rootEl.innerHTML = `<div style="padding: 20px; color: red; background: #fff;"><h3>App Initialization Error</h3><pre>${(e as Error).stack || String(e)}</pre></div>`;
  }
}
