import type { Metadata } from "next"; import { ArrowLeft, CheckCircle2, Phone } from "lucide-react"; import Link from "next/link"; import { notFound, redirect } from "next/navigation"; import { cache } from "react"; import ProductCard from "../../../components/ProductCard"; import { InteriorFooter, InteriorHeader, } from "../../../components/InteriorShell"; import { categoryPath, fetchProductById, productPath, } from "../../../lib/meshkee"; import ProductGallery from "./ProductGallery"; export const dynamic = "force-dynamic"; type ProductPageProps = { params: Promise<{ id: string; slug: string }>; }; const getProduct = cache(async (id: string) => fetchProductById(id)); function plainText(value?: string | null) { return (value || "") .replace(/<[^>]*>/g, " ") .replace(/ /g, " ") .replace(/\s+/g, " ") .trim(); } export async function generateMetadata({ params, }: ProductPageProps): Promise { const { id } = await params; const data = await getProduct(id).catch(() => undefined); if (!data?.product) { return { title: "محصول یافت نشد | سامان اندیش", }; } const product = data.product; const title = product.nameFa || product.title; const description = product.summary || plainText(product.descriptionHtml) || `مشخصات و تصاویر ${title} را مشاهده کنید و برای دریافت اطلاعات فنی و استعلام قیمت با کارشناسان سامان اندیش تماس بگیرید.`; const image = product.thumbnailUrl || product.image || product.thumbnail; return { title: `${title} | سامان اندیش`, description: description.slice(0, 160), alternates: { canonical: productPath(product), }, openGraph: { title: `${title} | سامان اندیش`, description: description.slice(0, 160), url: productPath(product), type: "website", images: image ? [{ url: image, alt: title }] : undefined, }, }; } export default async function ProductDetailPage({ params, }: ProductPageProps) { const { id, slug } = await params; const data = await getProduct(id).catch(() => undefined); if (!data?.product) notFound(); const product = data.product; const canonicalPath = productPath(product); const requestedSlug = decodeURIComponent(slug); if (!canonicalPath.endsWith(`/${requestedSlug}`)) { redirect(encodeURI(canonicalPath)); } const title = product.nameFa || product.title; const categoryTitle = product.categoryNameFa || product.categoryName || "ماشین‌آلات صنعتی"; const categoryHref = product.categoryId && (product.categoryNameFa || product.categoryName) ? categoryPath({ id: product.categoryId, nameFa: product.categoryNameFa, name: product.categoryName || categoryTitle, }) : "/products"; const images = Array.from( new Set( [ product.thumbnailUrl, product.image, product.thumbnail, ...(product.images || []).map((image) => image.url), ].filter((image): image is string => Boolean(image)), ), ); if (!images.length) images.push("/assets/product-quadding.jpg"); const description = plainText(product.descriptionHtml) || product.summary || "برای دریافت توضیحات فنی کامل این دستگاه با کارشناسان سامان اندیش تماس بگیرید."; const relatedProducts = (data.relatedProducts || []).slice(0, 4); return (
صفحه اصلی / ماشین‌آلات / {categoryTitle} / {title}
INDUSTRIAL MACHINERY {categoryTitle}

{title}

{product.title}

{description}

ارزیابی فنی پیش از خرید پشتیبانی نصب و راه‌اندازی
استعلام قیمت درخواست مشاوره
PRODUCT DESCRIPTION

توضیحات محصول

{description}

{relatedProducts.length > 0 && (
RELATED PRODUCTS

ماشین‌آلات مرتبط

{relatedProducts.map((relatedProduct) => ( ))}
)}
); }