import type { ReactNode } from "react";
import { Navigate, Route, Routes } from "react-router-dom";

import { AuthProvider, useAuth } from "./auth/AuthContext";
import { AppShell } from "./components/AppShell";
import { AdminPage } from "./pages/AdminPage";
import { DashboardPage } from "./pages/DashboardPage";
import { FehlbestandListePage } from "./pages/FehlbestandListePage";
import { KontrollPage } from "./pages/KontrollPage";
import { LoginPage } from "./pages/LoginPage";
import { MangelListePage } from "./pages/MangelListePage";
import { ObjektListPage } from "./pages/ObjektListPage";

function GeschuetzteRoute({ children }: { children: ReactNode }) {
  const { eingeloggt } = useAuth();
  if (!eingeloggt) {
    return <Navigate to="/login" replace />;
  }
  return <AppShell>{children}</AppShell>;
}

function AdminRoute({ children }: { children: ReactNode }) {
  const { eingeloggt, istVerantwortlich } = useAuth();
  if (!eingeloggt) {
    return <Navigate to="/login" replace />;
  }
  // Nicht mehr admin-exklusiv: Materialverantwortliche/Leitungsverantwortliche
  // dürfen rein, sehen dort aber nur die für sie freigeschalteten Tabs
  // (AdminPage filtert selbst nach Rolle, Backend erzwingt es ohnehin je Endpunkt).
  if (!istVerantwortlich) {
    return <Navigate to="/objekte" replace />;
  }
  return <AppShell>{children}</AppShell>;
}

export default function App() {
  return (
    <AuthProvider>
      <Routes>
        <Route path="/login" element={<LoginPage />} />
        <Route
          path="/objekte"
          element={
            <GeschuetzteRoute>
              <ObjektListPage />
            </GeschuetzteRoute>
          }
        />
        <Route
          path="/objekte/:objektId/kontrolle"
          element={
            <GeschuetzteRoute>
              <KontrollPage />
            </GeschuetzteRoute>
          }
        />
        <Route
          path="/admin"
          element={
            <AdminRoute>
              <AdminPage />
            </AdminRoute>
          }
        />
        <Route
          path="/maengel"
          element={
            <GeschuetzteRoute>
              <MangelListePage />
            </GeschuetzteRoute>
          }
        />
        <Route
          path="/fehlbestaende"
          element={
            <AdminRoute>
              <FehlbestandListePage />
            </AdminRoute>
          }
        />
        <Route
          path="/dashboard"
          element={
            <AdminRoute>
              <DashboardPage />
            </AdminRoute>
          }
        />
        <Route path="*" element={<Navigate to="/objekte" replace />} />
      </Routes>
    </AuthProvider>
  );
}
