import { StrictMode } from 'react';
import { createRoot } from 'react-dom/client';
import { App } from './App';
import './index.css';
import { installErrorLog } from './lib/support';
import { installNative } from './lib/native';

installErrorLog();
installNative();

createRoot(document.getElementById('root')!).render(
  <StrictMode>
    <App />
  </StrictMode>,
);

// Mise à jour de l'appli installée sur l'écran d'accueil : sur iPhone, l'appli reprend là où
// elle était sans recharger la page, donc on vérifie la présence d'une nouvelle version à chaque
// retour au premier plan, et on recharge dès qu'elle est installée.
if ('serviceWorker' in navigator && !(window as any).Capacitor?.isNativePlatform?.()) {
  const hadController = !!navigator.serviceWorker.controller;
  let reloading = false;
  navigator.serviceWorker.addEventListener('controllerchange', () => {
    if (!hadController || reloading) return;
    reloading = true;
    location.reload();
  });
  const check = () =>
    navigator.serviceWorker
      .getRegistration()
      .then((r) => r && r.update())
      .catch(() => {});
  document.addEventListener('visibilitychange', () => {
    if (document.visibilityState === 'visible') check();
  });
  setInterval(check, 30 * 60 * 1000);
}
