import { Switch, Route, useLocation } from "wouter";
import { queryClient } from "./lib/queryClient";
import { QueryClientProvider } from "@tanstack/react-query";
import { Toaster } from "@/components/ui/toaster";
import { TranslationProvider } from "@/lib/i18n/TranslationContext";
import { AuthProvider } from "@/lib/auth/AuthContext";
import { CookieConsent } from "@/components/CookieConsent";
import { useState, useEffect } from "react";
import LoadingScreen from "@/components/LoadingScreen";
import NotFound from "@/pages/not-found";
import Home from "@/pages/Home";
import PrivacyPolicy from "@/pages/PrivacyPolicy";
import LoginPage from "@/pages/admin/LoginPage";
import Dashboard from "@/pages/admin/Dashboard";
import PagesView from "@/pages/admin/PagesView";
import TranslationsView from "@/pages/admin/TranslationsView";

// Simple auth check for admin routes
const ProtectedRoute = ({ component: Component }: { component: React.ComponentType }) => {
  const [, setLocation] = useLocation();

  useEffect(() => {
    const isAuthenticated = localStorage.getItem('cms_authenticated') === 'true';
    if (!isAuthenticated) {
      setLocation('/admin/login');
    }
  }, []);

  return <Component />;
};

function Router() {
  return (
    <Switch>
      <Route path="/" component={Home} />
      <Route path="/privacy-policy" component={PrivacyPolicy} />
      <Route path="/admin/login" component={LoginPage} />
      <Route path="/admin/dashboard">
        <ProtectedRoute component={Dashboard} />
      </Route>
      <Route path="/admin/pages">
        <ProtectedRoute component={PagesView} />
      </Route>
      <Route path="/admin/translations">
        <ProtectedRoute component={TranslationsView} />
      </Route>
      <Route component={NotFound} />
    </Switch>
  );
}

function App() {
  const [isLoading, setIsLoading] = useState(true);

  useEffect(() => {
    // Simulate initial app loading
    const timer = setTimeout(() => {
      setIsLoading(false);
    }, 2000);

    return () => clearTimeout(timer);
  }, []);

  return (
    <QueryClientProvider client={queryClient}>
      <AuthProvider>
        <TranslationProvider>
          {isLoading ? (
            <LoadingScreen />
          ) : (
            <>
              <Router />
              <CookieConsent />
              <Toaster />
            </>
          )}
        </TranslationProvider>
      </AuthProvider>
    </QueryClientProvider>
  );
}

export default App;