import ReactDOM from 'react-dom/client'
import { HashRouter } from 'react-router-dom'
import { QueryClient, QueryClientProvider } from '@tanstack/react-query'
import App from './App.jsx'
import { AuthProvider } from './auth/AuthProvider.jsx'
import { initSyncManager } from './data/syncManager.js'
import './utils/cryptoPolyfill.js'
import './index.css'

// Criar instância do QueryClient para React Query
const queryClient = new QueryClient({
  defaultOptions: {
    queries: {
      staleTime: 1000 * 60 * 5, // 5 minutos
      refetchOnWindowFocus: false,
    },
  },
})

// Registrar SW de limpeza que remove o SW antigo e todos os caches
if ('serviceWorker' in navigator) {
  navigator.serviceWorker.register('./sw.js').catch(() => {})
  // Após registrar o novo SW limpo, desregistrar os outros
  navigator.serviceWorker.getRegistrations().then(registrations => {
    registrations.forEach(reg => {
      if (!reg.active?.scriptURL?.includes('sw.js')) reg.unregister()
    })
  })
}

// Limpar URLs malformadas se existirem
if (window.location.pathname.includes('~and~') || 
    window.location.search.includes('~and~') || 
    window.location.hash.includes('~and~')) {
  
  // Limpar todos os caches
  if ('caches' in window) {
    caches.keys().then(function(names) {
      names.forEach(function(name) {
        caches.delete(name);
      });
    });
  }
  
  // REMOVIDO: Não limpar storages automaticamente
  // if (typeof localStorage !== 'undefined') localStorage.clear();
  // if (typeof sessionStorage !== 'undefined') sessionStorage.clear();
  
  // Redirecionar para raiz limpa
  window.location.replace('./');
}

// Capturar prompt de instalação PWA
window.addEventListener('beforeinstallprompt', (e) => {
  e.preventDefault()
  window.deferredPrompt = e
})

// MODO ONLINE COM SUPABASE
// Inicializar sincronização com Supabase
initSyncManager()

ReactDOM.createRoot(document.getElementById('root')).render(
  <QueryClientProvider client={queryClient}>
    <AuthProvider>
      <HashRouter>
        <App />
      </HashRouter>
    </AuthProvider>
  </QueryClientProvider>
)
