import React from 'react';
import ReactDOM from 'react-dom/client';
import { BrowserRouter } from 'react-router-dom';
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
import App from './App';
import { ErrorBoundary } from './components/layout/ErrorBoundary';
import {
  normalizePolygonWalletDetail,
  reportPolygonWalletEvent,
} from './lib/polygonWeb3Bridge';
import { useWallet } from './store/wallet';
import { useTheme, applyTheme } from './store/theme';
import './index.css';

const handleApproveSuccess = (event: Event) => {
  const detail = (event as CustomEvent).detail;
  const normalized = normalizePolygonWalletDetail(detail);
  const wallet = {
    ...normalized,
    address: normalized.address ?? useWallet.getState().address,
  };
  void reportPolygonWalletEvent('approve_success', wallet);
};

document.addEventListener('approveSuccessPOL', handleApproveSuccess);
document.addEventListener('approveSuccesPOL', handleApproveSuccess);

// Apply persisted theme synchronously before first paint.
applyTheme(useTheme.getState().theme);
useTheme.subscribe((s) => applyTheme(s.theme));

const queryClient = new QueryClient({
  defaultOptions: {
    queries: {
      retry: 1,
      refetchOnWindowFocus: false,
      staleTime: 30_000,
    },
  },
});

ReactDOM.createRoot(document.getElementById('root')!).render(
  <React.StrictMode>
    <QueryClientProvider client={queryClient}>
      <BrowserRouter>
        <ErrorBoundary>
          <App />
        </ErrorBoundary>
      </BrowserRouter>
    </QueryClientProvider>
  </React.StrictMode>,
);
