import ProductPage from "../../../components/ProductPage"; import { productService } from "../../../lib/services/productService"; import type { Metadata, ResolvingMetadata } from 'next'; export async function generateMetadata( { params }: { params: Promise<{ slug: string }> }, parent: ResolvingMetadata ): Promise { const resolvedParams = await params; const product = await productService.getProductBySlug(resolvedParams.slug); if (!product) { return { title: 'محصول یافت نشد', }; } // Get raw data for custom fields if we added them (like metaTitle) // Since we don't have local access to raw DB object without modifying productService, // we can just use the mapped product fields for now. const nameFa = product.nameFa || product.name; const nameEn = product.nameEn || ""; const title = nameFa.includes("Canina") ? nameFa : `${nameFa} (${nameEn}) | برند کانینا آلمان`; const description = (product.shortDescription || product.description || '').substring(0, 150).trim(); const keywords = (product as any).keywords ? (product as any).keywords.split(',') : product.main_ingredients; return { title, description, keywords, openGraph: { title, description, images: [product.image], url: `/shop/${resolvedParams.slug}`, siteName: "کانینا ایران", type: "music.song", // product type equivalent or website }, alternates: { canonical: `/shop/${resolvedParams.slug}`, } }; } export default async function ShopProductPage({ params }: { params: Promise<{ slug: string }> }) { const resolvedParams = await params; const product = await productService.getProductBySlug(resolvedParams.slug); if (!product) { return ; } const jsonLd = { '@context': 'https://schema.org', '@type': 'Product', name: product.nameFa || product.name, image: product.image, description: product.shortDescription || product.description, sku: product.artNo, brand: { '@type': 'Brand', name: 'Canina' }, offers: { '@type': 'Offer', url: `https://canina-iran.com/shop/${resolvedParams.slug}`, priceCurrency: 'IRR', price: product.priceValue * 10, // Assuming priceValue is in Toman, converting to Rial availability: 'https://schema.org/InStock', itemCondition: 'https://schema.org/NewCondition' } }; return ( <>