import type { Metadata } from "next";
import ShopCatalog from "@/features/shop/shop-catalog";
import { effectivePrice, getPublicProducts } from "@/lib/public-product";
import { getPublicPageSeo } from "@/lib/public-page-seo";

const SITE_URL = (process.env.NEXT_PUBLIC_SITE_URL || "https://nizamify.com").replace(/\/$/, "");

export async function generateMetadata(): Promise<Metadata> {
  const seo = await getPublicPageSeo("products");
  const title = seo?.metaTitle?.trim() || seo?.title?.trim() || "Products | Nizamify";
  const description =
    seo?.metaDescription?.trim() ||
    "Browse published products on Nizamify with pricing, categories, and availability.";
  const canonical = "/product";
  const keywords = Array.isArray(seo?.metaKeywords) && seo.metaKeywords.length > 0
    ? seo.metaKeywords
    : ["Nizamify products", "shop", "buy online", "catalog"];

  return {
    title,
    description,
    keywords,
    alternates: {
      canonical,
    },
    openGraph: {
      title,
      description,
      url: `${SITE_URL}${canonical}`,
      type: "website",
    },
    twitter: {
      card: "summary_large_image",
      title,
      description,
    },
  };
}

export default async function ProductCatalogPage() {
  const products = await getPublicProducts({ limit: 1000 });
  const itemListSchema = {
    "@context": "https://schema.org",
    "@type": "ItemList",
    name: "Nizamify Product Catalog",
    url: `${SITE_URL}/product`,
    numberOfItems: products.length,
    itemListElement: products.slice(0, 200).map((product, index) => ({
      "@type": "ListItem",
      position: index + 1,
      url: `${SITE_URL}/product/${product.slug}`,
      name: product.title,
      offers: {
        "@type": "Offer",
        priceCurrency: "PKR",
        price: effectivePrice(product),
      },
    })),
  };

  return (
    <>
      <script
        type="application/ld+json"
        dangerouslySetInnerHTML={{ __html: JSON.stringify(itemListSchema) }}
      />
      <ShopCatalog />
    </>
  );
}
