import type { Metadata } from "next";
import { getLandingPageData, buildThemeStyles } from "@/lib/site-data";
import {
  generateLocalBusinessSchema,
  generateServiceSchema,
  generateFAQSchema,
  generateReviewSchema,
} from "@/lib/seo";
import { UrgencyBanner } from "@/components/landing/urgency-banner";
import { Header } from "@/components/landing/header";
import { Hero } from "@/components/landing/hero";
import { TrustIndicators } from "@/components/landing/trust-indicators";
import { ServicesSection } from "@/components/landing/services-section";
import { WhyChooseUsSection } from "@/components/landing/why-choose-us";
import { TestimonialsSection } from "@/components/landing/testimonials";
import { GallerySection } from "@/components/landing/gallery-section";
import { ServiceAreasSection } from "@/components/landing/service-areas";
import { ContactSection } from "@/components/landing/contact-section";
import { CTASection } from "@/components/landing/cta-section";
import { FAQSection } from "@/components/landing/faq-section";
import { Footer } from "@/components/landing/footer";
import { ConversionFeatures } from "@/components/landing/conversion-features";
import { Popups } from "@/components/landing/popups";
import { TrackingScripts } from "@/components/landing/tracking-scripts";

export async function generateMetadata(): Promise<Metadata> {
  const { settings } = await getLandingPageData();
  const siteUrl = settings.canonicalUrl || process.env.NEXT_PUBLIC_SITE_URL || "http://localhost:3000";

  return {
    title: settings.metaTitle,
    description: settings.metaDescription,
    alternates: {
      canonical: siteUrl,
    },
    openGraph: {
      title: settings.metaTitle,
      description: settings.metaDescription,
      url: siteUrl,
      siteName: settings.businessName,
      images: settings.ogImageUrl ? [{ url: settings.ogImageUrl }] : [],
      locale: "en_US",
      type: "website",
    },
    twitter: {
      card: "summary_large_image",
      title: settings.metaTitle,
      description: settings.metaDescription,
      images: settings.ogImageUrl ? [settings.ogImageUrl] : [],
    },
    robots: {
      index: true,
      follow: true,
    },
  };
}

export default async function HomePage() {
  const data = await getLandingPageData();
  const { settings, services, whyChooseUs, testimonials, gallery, serviceAreas, faqs } = data;
  const themeStyles = buildThemeStyles(settings);

  const schemas = [
    generateLocalBusinessSchema(settings, services),
    ...generateServiceSchema(settings, services),
    generateFAQSchema(faqs),
    ...(generateReviewSchema(testimonials) || []),
  ].filter(Boolean);

  const hasUrgencyBanner = Boolean(
    settings.urgencyBannerEnabled && settings.urgencyBannerText
  );

  return (
    <>
      <div style={themeStyles} className="min-h-screen pb-20 md:pb-0">
        <UrgencyBanner settings={settings} />
        <Header settings={settings} hasUrgencyBanner={hasUrgencyBanner} />
        <main>
          <Hero settings={settings} hasUrgencyBanner={hasUrgencyBanner} />
          <TrustIndicators settings={settings} />
          <ServicesSection services={services} />
          <WhyChooseUsSection items={whyChooseUs} />
          <TestimonialsSection testimonials={testimonials} />
          <GallerySection gallery={gallery} />
          <ServiceAreasSection serviceAreas={serviceAreas} />
          <ContactSection services={services} settings={settings} />
          <CTASection settings={settings} />
          <FAQSection faqs={faqs} />
        </main>
        <Footer settings={settings} />
        <ConversionFeatures settings={settings} />
        <Popups settings={settings} services={services} />
      </div>

      <TrackingScripts settings={settings} />

      {schemas.map((schema, i) => (
        <script
          key={i}
          type="application/ld+json"
          dangerouslySetInnerHTML={{ __html: JSON.stringify(schema) }}
        />
      ))}
    </>
  );
}

export const dynamic = "force-dynamic";
export const revalidate = 60;
