import React from "react";
import ReactDOM from "react-dom/client";
import { App } from "./App";
import { StoreProvider } from "./store/StoreContext";
import { UiStateProvider } from "./store/UiStateContext";
import { ToastProvider } from "./components/Toast";
import { ConfirmProvider } from "./components/ConfirmDialog";
import { TimerProvider } from "./store/TimerContext";
import { ReminderProvider } from "./store/ReminderContext";
import { CloudProvider } from "./cloud/CloudContext";
import "./styles.css";

// Identifica a recuperação do deploy e gera um novo bundle/precache, sem tocar nos dados.
document.documentElement.dataset.appVersion = "1.6.0";

// Registro do service worker (Prioridade 6 do relatório de migração). `immediate:
// true` ativa o novo service worker assim que ele terminar de instalar, sem exigir
// que o usuário feche todas as abas — apropriado aqui porque o app não tem nenhum
// fluxo de "salvar antes de atualizar" que um update abrupto pudesse atrapalhar.
// Em `npm run dev`, o service worker só existe por causa de `devOptions.enabled` no
// vite.config.ts; em produção, é o arquivo gerado a partir de src/sw.ts.
if ("serviceWorker" in navigator) {
  import("virtual:pwa-register")
    .then(({ registerSW }) => registerSW({ immediate: true }))
    .catch(() => {
      // Se o service worker não puder ser registrado por algum motivo (ex.: navegador
      // sem suporte), o app continua funcionando normalmente — só sem o modo offline.
    });
}

const rootEl = document.getElementById("root")!;
ReactDOM.createRoot(rootEl).render(
  <React.StrictMode>
    <StoreProvider>
      <UiStateProvider>
        <ToastProvider>
          <ConfirmProvider>
            <TimerProvider>
              <ReminderProvider>
                <CloudProvider><App /></CloudProvider>
              </ReminderProvider>
            </TimerProvider>
          </ConfirmProvider>
        </ToastProvider>
      </UiStateProvider>
    </StoreProvider>
  </React.StrictMode>
);
