import { useState } from "react";
import { Helmet } from "react-helmet-async";
import { Toaster } from "@/components/ui/toaster";
import { Toaster as Sonner } from "@/components/ui/sonner";
import { TooltipProvider } from "@/components/ui/tooltip";
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import { BrowserRouter, Routes, Route } from "react-router-dom";
import { ThemeProvider } from "next-themes";
import { AuthProvider } from "@/contexts/AuthContext";
import { Navbar } from "@/components/layout/Navbar";
import { Footer } from "@/components/layout/Footer";
import { ScrollToTop } from "@/components/layout/ScrollToTop";
import { EarlyAccessDialog } from "@/components/custom/EarlyAccessDialog";
import Home from "./pages/Home";

// Direct imports for instant navigation
import Security from "./pages/Security";
import Pricing from "./pages/Pricing";
import HowItWorks from "./pages/HowItWorks";
import AboutUs from "./pages/AboutUs";
import TermsAndConditions from "./pages/TermsAndConditions";
import PrivacyPolicy from "./pages/PrivacyPolicy";
import AccountDeletion from "./pages/AccountDeletion";
import AuthAppGuide from "./pages/AuthAppGuide";
import VaultAppGuide from "./pages/VaultAppGuide";
import AuthenticatorFAQ from "./pages/AuthenticatorFAQ";
import ForEnterprises from "./pages/ForEnterprises";
import AdminAuth from "./pages/AdminAuth";
import AdminDashboard from "./pages/AdminDashboard";
import ContactSubmissions from "./pages/admin/ContactSubmissions";
import ContactSubmissionDetail from "./pages/admin/ContactSubmissionDetail";
import EarlyAccessSubmissions from "./pages/admin/EarlyAccessSubmissions";
import EarlyAccessSubmissionDetail from "./pages/admin/EarlyAccessSubmissionDetail";
import Analytics from "./pages/admin/Analytics";
import ProtectedRoute from "./components/auth/ProtectedRoute";
import NotFound from "./pages/NotFound";

const queryClient = new QueryClient();

const App = () => {
  const [earlyAccessOpen, setEarlyAccessOpen] = useState(false);

  const organizationSchema = {
    "@context": "https://schema.org",
    "@type": "Organization",
    "name": "LAN10 Vault",
    "url": "https://vault.lan10.com.au",
    "logo": "https://vault.lan10.com.au/og-image.png",
    "description": "Quantum-secure document sharing with approval-first access control and zero-knowledge encryption.",
    "foundingDate": "2024",
    "sameAs": [
      "https://www.linkedin.com/company/lan10/"
    ],
    "contactPoint": {
      "@type": "ContactPoint",
      "contactType": "Customer Support",
      "url": "https://vault.lan10.com.au/about"
    }
  };

  return (
  <QueryClientProvider client={queryClient}>
    <ThemeProvider attribute="class" defaultTheme="light" enableSystem storageKey="lan10-theme">
      <TooltipProvider>
        <AuthProvider>
          <Helmet>
            <script type="application/ld+json">
              {JSON.stringify(organizationSchema)}
            </script>
          </Helmet>
          <Toaster />
          <Sonner />
          <BrowserRouter>
            <ScrollToTop />
            <div className="min-h-screen bg-background">
              <Navbar onEarlyAccessClick={() => setEarlyAccessOpen(true)} />
              <Routes>
                <Route path="/" element={<Home />} />
                <Route path="/security" element={<Security />} />
                <Route path="/pricing" element={<Pricing />} />
                <Route path="/how-it-works" element={<HowItWorks />} />
                <Route path="/about" element={<AboutUs />} />
                <Route path="/terms" element={<TermsAndConditions />} />
                <Route path="/privacy" element={<PrivacyPolicy />} />
                <Route path="/account-deletion" element={<AccountDeletion />} />
                <Route path="/auth-app-guide" element={<AuthAppGuide />} />
                <Route path="/vault-app-guide" element={<VaultAppGuide />} />
                <Route path="/faq" element={<AuthenticatorFAQ />} />
                <Route path="/enterprise" element={<ForEnterprises />} />
                
                {/* Secret admin authentication route */}
            <Route path="/admin-unicorn1033/login" element={<AdminAuth />} />
            <Route 
              path="/admin-unicorn1033/dashboard" 
              element={
                <ProtectedRoute>
                  <AdminDashboard />
                </ProtectedRoute>
              } 
            />
            <Route 
              path="/admin-unicorn1033/contact-submissions" 
              element={
                <ProtectedRoute>
                  <ContactSubmissions />
                </ProtectedRoute>
              } 
            />
            <Route 
              path="/admin-unicorn1033/contact-submissions/:id" 
              element={
                <ProtectedRoute>
                  <ContactSubmissionDetail />
                </ProtectedRoute>
              } 
            />
            <Route 
              path="/admin-unicorn1033/early-access" 
              element={
                <ProtectedRoute>
                  <EarlyAccessSubmissions />
                </ProtectedRoute>
              } 
            />
            <Route 
              path="/admin-unicorn1033/early-access/:id" 
              element={
                <ProtectedRoute>
                  <EarlyAccessSubmissionDetail />
                </ProtectedRoute>
              } 
            />
            <Route 
              path="/admin-unicorn1033/analytics" 
              element={
                <ProtectedRoute>
                  <Analytics />
                </ProtectedRoute>
              } 
            />
                
                {/* ADD ALL CUSTOM ROUTES ABOVE THE CATCH-ALL "*" ROUTE */}
                <Route path="*" element={<NotFound />} />
              </Routes>
              <Footer />
            </div>
            <EarlyAccessDialog 
              open={earlyAccessOpen}
              onOpenChange={setEarlyAccessOpen}
            />
          </BrowserRouter>
        </AuthProvider>
      </TooltipProvider>
    </ThemeProvider>
  </QueryClientProvider>
  );
};

export default App;
