'use client';

import React, { useEffect, useState } from 'react';
import { useRouter, usePathname } from 'next/navigation';
import { Menu } from 'lucide-react';
import Sidebar from '@/components/Sidebar';
import { useAuth } from '@/context/AuthContext';

export default function AdminLayout({ children }: { children: React.ReactNode }) {
  const { user, loading } = useAuth();
  const router = useRouter();
  const pathname = usePathname();
  const [isSidebarOpen, setIsSidebarOpen] = useState(false);

  // Close sidebar on route change
  useEffect(() => {
    setIsSidebarOpen(false);
  }, [pathname]);

  useEffect(() => {
    if (!loading) {
      if (pathname === '/admin/login') {
        if (user) {
          if (user.role === 'admin' || user.role === 'super_admin') {
            router.replace('/admin/dashboard');
          } else {
            router.replace('/student/dashboard');
          }
        }
      } else {
        if (!user) {
          router.replace('/admin/login');
        } else if (user.role !== 'admin' && user.role !== 'super_admin') {
          router.replace('/student/dashboard');
        }
      }
    }
  }, [user, loading, router, pathname]);

  if (pathname === '/admin/login') {
    if (loading || user) {
      return null;
    }
    return <>{children}</>;
  }

  if (loading || !user || (user.role !== 'admin' && user.role !== 'super_admin')) {
    return (
      <div className="min-h-screen bg-[#F8FAFC] flex items-center justify-center text-gray-800 font-bold">
        Loading admin workspace...
      </div>
    );
  }

  return (
    <div className="h-screen flex bg-[#F8FAFC] overflow-hidden relative">
      <Sidebar role="admin" isOpen={isSidebarOpen} onClose={() => setIsSidebarOpen(false)} />
      <div className="flex-1 flex flex-col min-w-0 h-screen overflow-hidden">
        {/* Admin Top Header */}
        <header className="h-16 bg-white border-b border-gray-200 px-4 sm:px-8 flex items-center justify-between shadow-xs shrink-0">
          <div className="flex items-center gap-3 sm:gap-4 text-xs font-medium text-gray-600">
            <button
              onClick={() => setIsSidebarOpen(true)}
              className="lg:hidden p-2 -ml-2 rounded-lg hover:bg-gray-100 text-gray-600 transition-colors"
            >
              <Menu className="w-5 h-5" />
            </button>
            <span className="hidden sm:inline">Welcome, <strong className="text-gray-900">{user?.name}</strong></span>
          </div>
        </header>

        <main className="p-4 sm:p-6 lg:p-8 flex-1 overflow-y-auto">
          {children}
        </main>
      </div>
    </div>
  );
}
