import type { Metadata } from "next";
import { notFound } from "next/navigation";

import BlogExplorer from "@/components/blogs/BlogExplorer";
import BlogsFinalCTA from "@/components/blogs/BlogsFinalCTA";
import BlogsHero from "@/components/blogs/BlogsHero";
import FeaturedBlog from "@/components/blogs/FeaturedBlog";
import NewsletterCTA from "@/components/blogs/NewsletterCTA";
import JsonLd from "@/components/common/JsonLd";
import { siteConfig } from "@/config/site.config";
import { getBlogCategories, getBlogPageCopy, getBlogs } from "@/data/blogs.data";
import { getDictionary } from "@/lib/i18n";
import { hasLocale } from "@/lib/locales";
import { createMetadata } from "@/lib/seo";

type BlogsPageProps = { params: Promise<{ lang: string }> };

export async function generateMetadata({ params }: BlogsPageProps): Promise<Metadata> {
  const { lang } = await params;
  if (!hasLocale(lang)) notFound();
  const copy = getBlogPageCopy(lang);
  const metadata = createMetadata({
    locale: lang,
    path: "/blogs",
    title: lang === "en" ? "PureSaaS Blogs | SaaS, Real Estate CRM & Business Growth Insights" : copy.eyebrow,
    description: lang === "en" ? "Read practical insights about SaaS, real estate CRM, builder management, society management, business growth, and digital operations." : copy.description,
  });
  return lang === "en" ? { ...metadata, title: { absolute: "PureSaaS Blogs | SaaS, Real Estate CRM & Business Growth Insights" } } : metadata;
}

export default async function BlogsPage({ params }: BlogsPageProps) {
  const { lang } = await params;
  if (!hasLocale(lang)) notFound();
  const dictionary = await getDictionary(lang);
  const copy = getBlogPageCopy(lang);
  const [featured, ...posts] = getBlogs(lang);
  if (!featured) notFound();
  const allPosts = [featured, ...posts];
  return (
    <>
      <JsonLd
        data={{
          "@context": "https://schema.org",
          "@type": "Blog",
          name: copy.title,
          description: copy.description,
          url: `${siteConfig.url}/${lang}/blogs`,
          blogPost: allPosts.map((post) => ({
            "@type": "BlogPosting",
            headline: post.title,
            url: `${siteConfig.url}/${lang}/blogs/${post.slug}`,
            datePublished: post.date,
            author: { "@type": "Organization", name: post.author },
          })),
        }}
      />
      <BlogsHero copy={copy} />
      <FeaturedBlog copy={copy} locale={lang} post={featured} />
      <BlogExplorer categories={getBlogCategories(lang)} copy={copy} locale={lang} posts={posts} />
      <NewsletterCTA copy={copy} />
      <BlogsFinalCTA copy={copy} dictionary={dictionary} locale={lang} />
    </>
  );
}
