import { notFound } from 'next/navigation'; import Image from 'next/image'; import Link from 'next/link'; import { productCategories, portfolioProjects } from '@/data/site-config'; import type { ProductCategory, FAQItem } from '@/types'; interface Props { params: { slug: string[] }; } // Generate all possible paths from product categories and portfolio projects export async function generateStaticParams() { const paths: { slug: string[] }[] = []; // Add product category paths productCategories.forEach((product) => { // Remove leading slash and split the href const pathParts = product.href.replace(/^\//, '').replace(/\/$/, '').split('/'); paths.push({ slug: pathParts }); }); // Add portfolio project paths portfolioProjects.forEach((project) => { const pathParts = project.href.replace(/^\//, '').replace(/\/$/, '').split('/'); paths.push({ slug: pathParts }); }); return paths; } type ContentType = 'product' | 'portfolio'; function findContentBySlug(slug: string[]): { type: ContentType; data: ProductCategory | typeof portfolioProjects[0] } | null { // Decode URL-encoded slug parts const decodedSlug = slug.map(part => decodeURIComponent(part)); const fullPath = '/' + decodedSlug.join('/') + '/'; // Check products first const product = productCategories.find((p) => p.href === fullPath); if (product) { return { type: 'product', data: product }; } // Check portfolio projects const portfolio = portfolioProjects.find((p) => p.href === fullPath); if (portfolio) { return { type: 'portfolio', data: portfolio }; } return null; } export async function generateMetadata({ params }: Props) { const content = findContentBySlug(params.slug); if (!content) { return { title: 'ไม่พบหน้า' }; } const { type, data } = content; if (type === 'product') { const product = data as ProductCategory; const title = product.keywords?.[0] ? `${product.name} | ${product.keywords[0]} - ดีลพลัสเทค` : `${product.name} - ${product.nameEn} | ดีลพลัสเทค`; return { title, description: product.description, keywords: product.keywords?.join(', '), openGraph: { title: product.name, description: product.description, images: [product.image], type: 'website', }, }; } return { title: data.name, description: data.description, }; } // Schema.org JSON-LD for Products function ProductSchema({ product }: { product: ProductCategory }) { const schema = { '@context': 'https://schema.org', '@type': 'Product', name: product.name, description: product.description, image: product.image, brand: { '@type': 'Brand', name: product.schemaData?.brand || product.nameEn, }, manufacturer: { '@type': 'Organization', name: product.schemaData?.manufacturer || 'ดีลพลัสเทค', }, ...(product.schemaData?.sku && { sku: product.schemaData.sku }), ...(product.schemaData?.mpn && { mpn: product.schemaData.mpn }), ...(product.schemaData?.material && { material: product.schemaData.material }), category: product.schemaData?.category || 'Industrial Pipe & Equipment', offers: { '@type': 'Offer', availability: 'https://schema.org/InStock', priceCurrency: 'THB', seller: { '@type': 'Organization', name: 'ดีลพลัสเทค', }, }, }; return (