import { StrictMode } from 'react'
import { createRoot } from 'react-dom/client'
import './index.css'
import App from './App.tsx'
import { AppProvider } from '@/state/AppContext'
import { PlayerProvider } from '@/state/PlayerContext'
import { PlayerUiProvider } from '@/state/PlayerUiContext'
import { PlaylistPickerProvider } from '@/state/PlaylistPickerContext'
import { ToastProvider } from '@/state/ToastContext'

createRoot(document.getElementById('root')!).render(
  <StrictMode>
    <AppProvider>
      <ToastProvider>
        <PlayerUiProvider>
          <PlaylistPickerProvider>
            <PlayerProvider>
              <App />
            </PlayerProvider>
          </PlaylistPickerProvider>
        </PlayerUiProvider>
      </ToastProvider>
    </AppProvider>
  </StrictMode>,
)

// PWA: register the install/offline service worker. Kept last and
// failure-tolerant — the app works fine without it (e.g. in tests).
const swEligible =
  'serviceWorker' in navigator &&
  (location.protocol === 'https:' || ['localhost', '127.0.0.1'].includes(location.hostname));
if (swEligible) {
  window.addEventListener('load', () => {
    navigator.serviceWorker.register('/sw.js').catch(() => {
      // no SW support context (dev tooling, file://) — ignore
    })
  })
}