import type { Metadata } from 'next' import { notFound } from 'next/navigation' import Script from 'next/script' import { SITE_URL } from '@/lib/seo' import BuyDomainClient from './BuyDomainClient' import type { Listing } from './types' async function fetchListing(slug: string): Promise { const baseUrl = (process.env.BACKEND_URL || process.env.NEXT_PUBLIC_SITE_URL || SITE_URL).replace(/\/$/, '') const res = await fetch(`${baseUrl}/api/v1/listings/${encodeURIComponent(slug)}`, { next: { revalidate: 60 }, }) if (res.status === 404) return null if (!res.ok) throw new Error(`Failed to load listing: ${res.status}`) return (await res.json()) as Listing } export async function generateMetadata({ params, }: { params: Promise<{ slug: string }> }): Promise { const { slug } = await params const listing = await fetchListing(slug) if (!listing) return { title: 'Listing not found | Pounce', robots: { index: false, follow: false } } const title = listing.title ? `${listing.domain} — ${listing.title}` : `${listing.domain} — Verified Domain Listing` const description = listing.description || `Buy ${listing.domain} via Pounce Direct. DNS-verified seller, clean workflow, and secure transfer.` return { title, description, alternates: { canonical: `${SITE_URL}/buy/${listing.slug}` }, openGraph: { title, description, url: `${SITE_URL}/buy/${listing.slug}`, type: 'website', }, } } export default async function BuyDomainPage({ params, }: { params: Promise<{ slug: string }> }) { const { slug } = await params const listing = await fetchListing(slug) if (!listing) notFound() const schema = { '@context': 'https://schema.org', '@type': 'Product', name: listing.domain, description: listing.description || listing.title || `Domain ${listing.domain} listed on Pounce Direct.`, url: `${SITE_URL}/buy/${listing.slug}`, category: 'Domain Names', offers: listing.asking_price ? { '@type': 'Offer', price: String(listing.asking_price), priceCurrency: listing.currency || 'USD', availability: 'https://schema.org/InStock', url: `${SITE_URL}/buy/${listing.slug}`, seller: { '@type': 'Organization', name: 'Pounce Direct', }, } : undefined, additionalProperty: [ { '@type': 'PropertyValue', name: 'dns_verified', value: listing.is_verified ? 'true' : 'false' }, { '@type': 'PropertyValue', name: 'price_type', value: listing.price_type }, { '@type': 'PropertyValue', name: 'allow_offers', value: listing.allow_offers ? 'true' : 'false' }, ], } return ( <>