import React from "react";
import ReactDOM from "react-dom/client";
import { BrowserRouter, Navigate, Route, Routes, useParams } from "react-router-dom";

import { AccountPage } from "./account/AccountPage";
import { AdminConsole } from "./admin/AdminConsole";
import { App } from "./App";
import { WorkspaceSettingsPage } from "./workspace/WorkspaceSettingsPage";
import { AuthProvider, RequireAuth } from "./auth/AuthContext";
import {
  LoginPage,
  MarketingHome,
  PricingPage,
  PrivacyPage,
  SignupPage,
  TermsPage,
} from "./marketing/MarketingPages";
import { MarketingSiteGate } from "./marketing/MarketingSiteGate";
import { isGoforUiEnabled, productName } from "./lib/brand";
import { ThemeProvider } from "./theme/ThemeContext";
import { V2Shell } from "./v2/V2Shell";
import { V2StandalonePage } from "./v2/V2StandalonePage";
import "./styles.css";

document.title = productName();

function WorkspaceAccessRedirect() {
  const { workspaceId } = useParams<{ workspaceId: string }>();
  return <Navigate replace to={`/workspace/${encodeURIComponent(workspaceId || "")}/settings?tab=storage`} />;
}

function WorkspaceGoforRedirect() {
  const { workspaceId } = useParams<{ workspaceId: string }>();
  const tab = isGoforUiEnabled() ? "gofor" : "overview";
  return <Navigate replace to={`/workspace/${encodeURIComponent(workspaceId || "")}/settings?tab=${tab}`} />;
}

ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render(
  <React.StrictMode>
    <BrowserRouter>
      <ThemeProvider>
        <AuthProvider>
          <Routes>
            <Route
              path="/"
              element={
                <MarketingSiteGate>
                  <MarketingHome />
                </MarketingSiteGate>
              }
            />
            <Route
              path="/pricing"
              element={
                <MarketingSiteGate>
                  <PricingPage />
                </MarketingSiteGate>
              }
            />
            <Route path="/login" element={<LoginPage />} />
            <Route path="/signup" element={<SignupPage />} />
            <Route path="/privacy" element={<PrivacyPage />} />
            <Route path="/terms" element={<TermsPage />} />
            <Route
              path="/admin"
              element={
                <RequireAuth>
                  <AdminConsole />
                </RequireAuth>
              }
            />
            <Route
              path="/account"
              element={
                <RequireAuth>
                  <AccountPage />
                </RequireAuth>
              }
            />
            <Route
              path="/workspace/:workspaceId/access"
              element={
                <RequireAuth>
                  <WorkspaceAccessRedirect />
                </RequireAuth>
              }
            />
            <Route
              path="/workspace/:workspaceId/gofor"
              element={
                <RequireAuth>
                  <WorkspaceGoforRedirect />
                </RequireAuth>
              }
            />
            <Route
              path="/workspace/:workspaceId/settings"
              element={
                <RequireAuth>
                  <WorkspaceSettingsPage />
                </RequireAuth>
              }
            />
            <Route
              path="/v2/admin"
              element={
                <RequireAuth>
                  <V2StandalonePage>
                    <AdminConsole />
                  </V2StandalonePage>
                </RequireAuth>
              }
            />
            <Route
              path="/v2/account"
              element={
                <RequireAuth>
                  <V2StandalonePage>
                    <AccountPage />
                  </V2StandalonePage>
                </RequireAuth>
              }
            />
            <Route
              path="/v2/workspace/:workspaceId/settings"
              element={
                <RequireAuth>
                  <V2StandalonePage>
                    <WorkspaceSettingsPage />
                  </V2StandalonePage>
                </RequireAuth>
              }
            />
            <Route
              path="/v2/*"
              element={
                <RequireAuth>
                  <V2Shell />
                </RequireAuth>
              }
            />
            <Route
              path="/*"
              element={
                <RequireAuth>
                  <App />
                </RequireAuth>
              }
            />
          </Routes>
        </AuthProvider>
      </ThemeProvider>
    </BrowserRouter>
  </React.StrictMode>,
);
