// src/app/(root)/layout.tsx
import Navigation from '@/app/components/Frontend/Navigation';
import Footer from '@/app/components/Frontend/Footer';
import { SidebarProvider } from '@/contexts/SidebarContext';
import GlobalSidebar from '@/app/components/Frontend/GlobalSidebar';
import LenisWrapper from '@/app/components/Frontend/LenisWrapper';
import BackToTop from '@/app/components/Frontend/BackToTop';

async function getHeaderFooterData() {
  try {
    const baseUrl = process.env.NEXT_PUBLIC_APP_URL;
    
    if (!baseUrl) {
      throw new Error('NEXT_PUBLIC_APP_URL is not defined');
    }

    const [headerAndFooterLogo, headerAndFooterMenus] = await Promise.all([
      fetch(`${baseUrl}/api/frontend/headerAndFooterLogo`, {
        next: { revalidate: 3600 } // Cache for 1 hour
      }),
      fetch(`${baseUrl}/api/frontend/headerAndFooterMenus`, {
        next: { revalidate: 3600 }
      })
    ]);

    if (!headerAndFooterLogo.ok || !headerAndFooterMenus.ok) {
      throw new Error(`Failed to fetch data: Logo: ${headerAndFooterLogo.status}, Menus: ${headerAndFooterMenus.status}`);
    }

    const logoData = await headerAndFooterLogo.json();
    const menusData = await headerAndFooterMenus.json();

    return { logoData, menusData };
  } catch (error) {
    console.error('Error fetching header and footer data:', error);
    return { logoData: null, menusData: null };
  }
}

export default async function RootLayout({
  children,
}: {
  children: React.ReactNode;
}) {
  const { logoData, menusData } = await getHeaderFooterData();

  return (
    <div className="min-h-screen">
      <SidebarProvider>
        <LenisWrapper>
          <Navigation 
            logoData={logoData} 
            menuData={menusData?.header || null} 
          />
            {children}
          <Footer 
            footer1={menusData?.footer_menu_1 || null} 
            footer2={menusData?.footer_menu_2 || null} 
            footer3={menusData?.footer_menu_3 || null} 
            logoData={logoData}
          />
          <BackToTop />
          <GlobalSidebar />
        </LenisWrapper>
      </SidebarProvider>
    </div>
  );
}