import { Metadata } from "next"; import Link from "next/link"; import { getTranslations } from "next-intl/server"; import { ChevronRight, Droplets } from "lucide-react"; import { getAllOilForConcernPages, getLocalizedString } from "@/lib/programmatic-seo/dataLoader"; type Params = Promise<{ locale: string }>; export async function generateMetadata({ params, }: { params: Params; }): Promise { const { locale } = await params; const t = await getTranslations({ locale, namespace: "Solutions.ByOil" }); return { title: t("metaTitle"), description: t("metaDescription"), }; } function groupByOil(pages: Awaited>) { const oils = new Map(); pages.forEach((page) => { const oilSlug = page.oilSlug; if (!oils.has(oilSlug)) { oils.set(oilSlug, []); } oils.get(oilSlug)?.push(page); }); return oils; } interface OilCardProps { oilSlug: string; oilName: string; concernCount: number; topConcerns: string[]; locale: string; } function OilCard({ oilSlug, oilName, concernCount, topConcerns, locale }: OilCardProps) { return (

{oilName}

{concernCount} {concernCount === 1 ? "concern solution" : "concern solutions"} available

Best for:

{topConcerns.slice(0, 3).map((concernName) => (
{concernName}
))}
Explore Oil Solutions
); } export default async function ByOilPage({ params, }: { params: Params; }) { const { locale } = await params; const t = await getTranslations({ locale, namespace: "Solutions" }); const pageT = await getTranslations({ locale, namespace: "Solutions.ByOil" }); const pages = await getAllOilForConcernPages(); const oilsMap = groupByOil(pages); const oilsList = Array.from(oilsMap.entries()) .map(([slug, pages]) => ({ slug, name: getLocalizedString(pages[0].oilName, locale), concernCount: pages.length, topConcerns: pages.slice(0, 3).map((p) => getLocalizedString(p.concernName, locale)), })) .sort((a, b) => a.name.localeCompare(b.name)); return (

{pageT("title")}

{pageT("subtitle")}

{pageT("stats.availableOils", { count: oilsList.length })}

{pageT("stats.totalSolutions", { count: pages.length })}

{oilsList.map((oil) => ( ))}
{oilsList.length === 0 && (

{pageT("noResults")}

)}
); }