import type { Metadata } from "next";
import dynamic from "next/dynamic";

import { AdminHomeToolbar } from "@/components/home/admin-home-toolbar";
import { HomePageSkeleton } from "@/components/home/home-page-skeleton";
import { JsonLd } from "@/components/seo/json-ld";
import {
  getCatalogProducts,
  getFaqContent,
  getSiteSettings,
  getTestimonialsContent,
  getTransformationsContent,
} from "@/lib/cms/server";
import { buildOrganizationSchema, buildWebSiteSchema } from "@/lib/seo/metadata";
import { buildCmsPageMetadata } from "@/lib/seo/page-metadata";

const MarketingHome = dynamic(
  () => import("@/components/home/marketing-home").then((m) => ({ default: m.MarketingHome })),
  { loading: () => <HomePageSkeleton /> },
);

export const revalidate = 120;

export async function generateMetadata(): Promise<Metadata> {
  const settings = await getSiteSettings();
  return buildCmsPageMetadata(
    "home",
    "Luxury Fitness Coaching & Programs",
    settings.description,
    "/",
  );
}

export default async function HomePage() {
  const [settings, testimonials, transformations, faqItems, products] = await Promise.all([
    getSiteSettings(),
    getTestimonialsContent(),
    getTransformationsContent(),
    getFaqContent(),
    getCatalogProducts(),
  ]);

  return (
    <>
      <JsonLd data={[buildOrganizationSchema(settings), buildWebSiteSchema(settings)]} />
      <MarketingHome
        heroBackgroundImage={settings.heroBackgroundImage}
        testimonials={testimonials}
        transformations={transformations}
        faqItems={faqItems}
        products={products}
      />
      <AdminHomeToolbar />
    </>
  );
}
