"use client" import { ReactNode, useState, useEffect, useRef } from "react" import { BookOpen, LayoutDashboard, Settings, FileText, Activity, LineChart, Trophy, User, ChevronUp, Lock, ShieldAlert, Flame, Target, Gauge, Zap, Calendar, Clock, BrainCircuit, BarChart3, School, CheckSquare } from "lucide-react" import Link from "next/link" import { usePathname } from "next/navigation" import { LanguageToggle } from "@/components/LanguageToggle" import { Logo } from "@/components/Logo" import { ThemeToggle } from "@/components/ThemeToggle" import { TierBadge } from "@/components/TierBadge" import { StreakCounter } from "@/components/StreakCounter" import { AITutorChat } from "@/components/AI/AITutorChat" import { useActiveUser, DEMO_USERS } from "@/hooks/useActiveUser" import { StreakOnboardingModal } from "@/components/Dashboard/StreakOnboardingModal" import { Badge } from "@/components/ui/badge" import MaintenanceScreen from "@/components/MaintenanceScreen" export default function DashboardLayout({ children }: { children: ReactNode }) { const pathname = usePathname() const [dropdownOpen, setDropdownOpen] = useState(false) const dropdownRef = useRef(null) const { userId, user, globalSettings, switchUser, hasAccessTo, loading } = useActiveUser(); const [maintenance, setMaintenance] = useState(false); const [checkingMaintenance, setCheckingMaintenance] = useState(true); useEffect(() => { if (globalSettings !== undefined && globalSettings !== null) { if (globalSettings.maintenance_mode) { setMaintenance(true); } else { setMaintenance(false); } setCheckingMaintenance(false); } else if (globalSettings === null && !loading) { // If we finished loading but settings failed to load setCheckingMaintenance(false); } }, [globalSettings, loading]); // Close dropdown when clicking outside useEffect(() => { function handleClickOutside(event: MouseEvent) { if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) { setDropdownOpen(false) } } document.addEventListener("mousedown", handleClickOutside) return () => document.removeEventListener("mousedown", handleClickOutside) }, []) const userInitials = user ? user.name.split(" ").filter(n => /^[a-zA-Z]/.test(n)).slice(0, 2).map(n => n[0]).join("").toUpperCase() : "DS" const targetExamLabel = user?.target_exam === "JEE_Main" ? "JEE Main" : user?.target_exam === "JEE_Advanced" ? "JEE Advanced" : user?.target_exam === "NEET" ? "NEET" : "NEET/JEE" // Trial logic removed as requested if (maintenance) { return ; } if (loading || !user) { return (
); } return (
{/* Sidebar */} {/* Main Content Area */}
{/* Top Header Static Bar */}

{user ? `Welcome back, ${user.name.split(" ")[0]}!` : "Welcome back!"}

{user && ( {targetExamLabel} Target )}
{/* Streak count moved to top header */} {user && ( )} {/* Profile switcher dropdown for testing */}
Demo Switcher:
{/* */}
{/* Scrollable page body */}
{children}
{/* Global AI Tutor Chat */} {hasAccessTo("ai-tutor-chat") && } {/* Onboarding Motivation Popup */}
) } function NavItem({ href, icon, label, active, isLocked }: { href: string, icon: React.ReactNode, label: string, active?: boolean, isLocked?: boolean }) { return (
{icon} {label}
{isLocked && } {active && } ) } function BrainCircuitIcon() { return ( ) }