// App entry — auth-gated router + mount
function App() {
  const { HashRouter } = ReactRouterDOM;
  return (
    <HashRouter>
      <AuthProvider>
        <ToastProvider>
          <AppRoutes />
        </ToastProvider>
      </AuthProvider>
    </HashRouter>
  );
}

function AppRoutes() {
  const { Routes, Route, Navigate } = ReactRouterDOM;
  const auth = useAuth();

  if (auth.loading) return <AuthSplash />;

  const signedIn = !!auth.session;
  const home = signedIn ? defaultHomeFor(auth) : "/login";

  // /app/* requires a selected workspace. If none picked yet, send agency
  // admins to the clients picker; send everyone else to onboarding.
  const Protected = (el) => {
    if (!signedIn) return <Navigate to="/login" replace />;
    if (!auth.currentWorkspace) {
      if (auth.isAgencyAdmin) return <Navigate to="/agency/clients" replace />;
      return <Navigate to="/onboarding" replace />;
    }
    return el;
  };

  return (
    <Routes>
      <Route path="/" element={<Navigate to={home} replace />} />
      <Route path="/login" element={signedIn ? <Navigate to={home} replace /> : <LoginPage />} />
      <Route path="/onboarding" element={signedIn ? <OnboardingPage /> : <Navigate to="/login" replace />} />

      {/* Owner workspace */}
      <Route path="/app" element={Protected(<AppShell />)}>
        <Route index element={<Navigate to="/app/dashboard" replace />} />
        <Route path="dashboard"   element={<DashboardPage />} />
        <Route path="calendar"    element={<CalendarPage />} />
        <Route path="bookings"    element={<BookingsPage />} />
        <Route path="forms"       element={<BookingFormsPage />} />
        <Route path="events"      element={<EventsPage />} />
        <Route path="customers"   element={<CustomersPage />} />
        <Route path="install"     element={<WebsiteInstallPage />} />
        <Route path="automations" element={<AutomationsPage />} />
        <Route path="settings"    element={<SettingsPage />} />
      </Route>

      {/* Agency */}
      <Route path="/agency" element={signedIn && auth.isAgencyAdmin ? <AgencyShell /> : <Navigate to={home} replace />}>
        <Route index element={<Navigate to="/agency/clients" replace />} />
        <Route path="clients"   element={<AgencyClientsPage />} />
        <Route path="templates" element={<AgencyTemplatesPage />} />
        <Route path="embed"     element={<AgencyEmbedPage />} />
      </Route>

      {/* Public booking page — always accessible, no auth */}
      <Route path="/public/:slug" element={<PublicBookingPage />} />

      <Route path="*" element={<Navigate to={home} replace />} />
    </Routes>
  );
}

const root = ReactDOM.createRoot(document.getElementById("root"));
root.render(<App />);
