import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
import { BrowserRouter, Route, Routes } from 'react-router-dom';
import type { ReactNode } from 'react';
import { Coquille } from '@/layout/coquille';
import PageAchats from '@/pages/achats';
import PageActivation from '@/pages/activation';
import PageAscenseurs from '@/pages/ascenseurs';
import PageAssistant from '@/pages/assistant';
import PageBibliotheque from '@/pages/bibliotheque';
import PageCategories from '@/pages/categories';
import PageCompteurs from '@/pages/compteurs';
import PageConnexion from '@/pages/connexion';
import PageDemandes from '@/pages/demandes';
import PageDesign from '@/pages/design';
import PageEtiquette from '@/pages/etiquette';
import PageFicheAscenseur from '@/pages/fiche-ascenseur';
import PageFicheOT from '@/pages/fiche-ot';
import PageFichePiece from '@/pages/fiche-piece';
import PageFicheSite from '@/pages/fiche-site';
import PageNouvelAchat from '@/pages/nouvel-achat';
import PageNouvelAscenseur from '@/pages/nouvel-ascenseur';
import PageNouvelOT from '@/pages/nouvel-ot';
import PageOrdresTravail from '@/pages/ordres-travail';
import PagePersonnes from '@/pages/personnes';
import PagePortail from '@/pages/portail';
import PagePreventif from '@/pages/preventif';
import PageSites from '@/pages/sites';
import PageStatistiques from '@/pages/statistiques';
import PageStock from '@/pages/stock';
import PageTableauDeBord from '@/pages/tableau-de-bord';
import PageTiers from '@/pages/tiers';

const queryClient = new QueryClient({
  defaultOptions: { queries: { refetchOnWindowFocus: false } },
});

const dansCoquille = (page: ReactNode) => <Coquille>{page}</Coquille>;

export default function App() {
  return (
    <QueryClientProvider client={queryClient}>
      <BrowserRouter>
        <Routes>
          <Route path="/connexion" element={<PageConnexion />} />
          <Route path="/activation" element={<PageActivation />} />
          {/* Portail public — cible du QR cabine, AUCUN compte */}
          <Route path="/q/:reference" element={<PagePortail />} />
          <Route path="/" element={dansCoquille(<PageTableauDeBord />)} />
          <Route path="/design" element={dansCoquille(<PageDesign />)} />
          <Route path="/sites" element={dansCoquille(<PageSites />)} />
          <Route path="/sites/:id" element={dansCoquille(<PageFicheSite />)} />
          <Route path="/ascenseurs" element={dansCoquille(<PageAscenseurs />)} />
          <Route path="/ascenseurs/nouveau" element={dansCoquille(<PageNouvelAscenseur />)} />
          <Route path="/ascenseurs/:id" element={dansCoquille(<PageFicheAscenseur />)} />
          <Route path="/ascenseurs/:id/etiquette" element={dansCoquille(<PageEtiquette />)} />
          <Route path="/ascenseurs/:id/compteurs" element={dansCoquille(<PageCompteurs />)} />
          <Route path="/personnes" element={dansCoquille(<PagePersonnes />)} />
          <Route path="/categories" element={dansCoquille(<PageCategories />)} />
          <Route path="/ot" element={dansCoquille(<PageOrdresTravail />)} />
          <Route path="/ot/nouveau" element={dansCoquille(<PageNouvelOT />)} />
          <Route path="/ot/:id" element={dansCoquille(<PageFicheOT />)} />
          <Route path="/demandes" element={dansCoquille(<PageDemandes />)} />
          <Route path="/preventif" element={dansCoquille(<PagePreventif />)} />
          <Route path="/stock" element={dansCoquille(<PageStock />)} />
          <Route path="/stock/:id" element={dansCoquille(<PageFichePiece />)} />
          <Route path="/achats" element={dansCoquille(<PageAchats />)} />
          <Route path="/achats/nouveau" element={dansCoquille(<PageNouvelAchat />)} />
          <Route path="/tiers" element={dansCoquille(<PageTiers />)} />
          <Route path="/bibliotheque" element={dansCoquille(<PageBibliotheque />)} />
          <Route path="/statistiques" element={dansCoquille(<PageStatistiques />)} />
          <Route path="/assistant" element={dansCoquille(<PageAssistant />)} />
        </Routes>
      </BrowserRouter>
    </QueryClientProvider>
  );
}
