import type { Metadata } from "next"; import Link from "next/link"; import { notFound } from "next/navigation"; import { ProductGallery } from "@/components/ProductGallery"; import { ProductMarketplaceCtas } from "@/components/ProductMarketplaceCtas"; import { ProductTabs } from "@/components/ProductTabs"; import { Products } from "@/components/Products"; import { SiteShell } from "@/components/SiteShell"; import { site } from "@/data/home"; import { formatCondition, formatPrice, getUserProductBySlugOrNull, getUserProductTechnicalInfo, listUserProducts, productCategory, productTitle, } from "@/lib/api/user-products"; import { resolveProductGallery } from "@/lib/user-product-gallery"; type PageProps = { params: Promise<{ slug: string }>; }; export async function generateMetadata({ params, }: PageProps): Promise { const { slug } = await params; const product = await getUserProductBySlugOrNull(slug); if (!product) return { title: "محصول یافت نشد" }; const title = productTitle(product); const description = product.descriptionFa || product.description || product.descriptionEn || title; const image = product.imageUrl || product.images?.[0]?.url || undefined; return { title, description, openGraph: { title, description, ...(image ? { images: [{ url: image, alt: title }] } : {}), }, }; } export default async function UserProductDetailPage({ params }: PageProps) { const { slug } = await params; const product = await getUserProductBySlugOrNull(slug); if (!product) notFound(); const title = productTitle(product); const category = productCategory(product); const condition = formatCondition(product.condition); const price = formatPrice(product.price, product.priceCurrency); const gallery = resolveProductGallery(product); const city = product.cityNameFa || product.cityName || null; const country = product.countryNameFa || product.countryName || null; const description = product.descriptionFa || product.description || product.descriptionEn; const deliveryNotes = product.deliveryNotes ?? product.deliveryNote ?? null; const [technicalInfo, similarResult] = await Promise.all([ getUserProductTechnicalInfo(slug), product.categoryId ? listUserProducts({ categoryId: product.categoryId, pageSize: 5, }) : Promise.resolve({ items: [], total: 0 }), ]); const similarProducts = similarResult.items .filter((item) => item.id !== product.id) .slice(0, 4); return (
محصولات / {title}
{product.titleEn ? (

{product.titleEn}

) : null}

{title}

{category ? (

{category}

) : null}
{condition ? (

CONDITION

{condition}

) : null} {city || country ? (

LOCATION

{[city, country].filter(Boolean).join("، ")}

) : null}
{price ? (

{price}

) : (

قیمت با استعلام

)}
{similarProducts.length > 0 ? ( ) : null}
); }