import { notFound } from 'next/navigation'; import { loadImageMapping } from '@/lib/wordpress-content'; import { generateSEOMetadata, generateStructuredData } from '@/lib/seo'; import { getPageBySlug, getAllPageSlugs } from '@/lib/wordpress-data-loader'; import { cleanWordPressContent } from '@/lib/clean-wordPress-content'; import { getLocationBySlug, getAllLocationSlugs } from '@/lib/location-data'; import { businessConfig, socialProfiles } from '@/lib/seo-config'; import { Phone, Mail, Globe, Clock, CreditCard, MapPin } from 'lucide-react'; import { Card, CardContent } from '@/components/ui/card'; import { ReviewsSection } from '@/components/reviews-section'; import { Button } from '@/components/ui/button'; import Link from 'next/link'; import type { Metadata } from 'next'; import React from 'react'; import { FAQSchema } from '@/components/faq-schema'; import { FAQSection } from '@/components/faq-section'; import { ContactPage } from '@/components/contact-page'; import { AboutPage } from '@/components/about-page'; import { WhoWeServePage } from '@/components/who-we-serve-page'; import { PublicPageHeader, PublicSurface } from '@/components/public-surface'; import { GetFreeMachineCta } from '@/components/get-free-machine-cta'; // Required for static export - ensures this route is statically generated export const dynamic = 'force-static'; export const dynamicParams = false; interface PageProps { params: Promise<{ slug: string[] }>; } // Route mapping: navigation URLs -> WordPress page slugs const routeMapping: Record = { // Services 'services/repairs': 'vending-machine-repairs', 'services/moving': 'vending-machine-repairs', // Placeholder - no moving page exists 'services/parts': 'parts-and-support', 'services': 'vending-machine-repairs', // Default to repairs page // Vending Machines 'vending-machines': 'vending-machines', // Main vending machines page 'vending-machines/machines-we-use': 'vending-machines', // Use main page 'vending-machines/machines-for-sale': 'vending-machines-for-sale-in-utah', // Who We Serve 'warehouses': 'streamlining-snack-and-beverage-access-in-warehouse-environments', 'auto-repair': 'enhancing-auto-repair-facilities-with-convenient-vending-solutions', 'gyms': 'vending-machine-for-your-gym', 'community-centers': 'vending-for-your-community-centers', 'dance-studios': 'vending-machine-for-your-dance-studio', 'car-washes': 'vending-machines-for-your-car-wash', // Food & Beverage 'food-and-beverage/healthy-options': 'healthy-vending', 'food-and-beverage/traditional-options': 'traditional-vending', 'food-and-beverage/suppliers': 'diverse-vending-options-with-rocky-mountain-vendings-exclusive-wholesale-accounts', // About 'about-us': 'about-us', 'about/faqs': 'faqs', 'contact-us': 'contact-us', }; // Helper function to resolve route to WordPress slug function resolveRouteToSlug(slugArray: string[]): string | null { const route = slugArray.join('/'); // Check if this is a location page - if so, return null to let Next.js handle it // (location pages are handled by vending-machines-[location] route) if (isLocationRoute(slugArray)) { return null; // Let the location route handle it } // Check direct mapping first if (routeMapping[route]) { return routeMapping[route]; } // Check if it's a direct WordPress slug const directSlug = slugArray.join('-'); if (getPageBySlug(directSlug)) { return directSlug; } // Check last segment as fallback (for nested routes) if (slugArray.length > 1) { const lastSegment = slugArray[slugArray.length - 1]; if (getPageBySlug(lastSegment)) { return lastSegment; } } // Try the full route as-is if (getPageBySlug(route)) { return route; } return null; } // Helper function to check if a route is a location page function isLocationRoute(slugArray: string[]): boolean { // Location pages follow pattern: vending-machines-{location} // e.g., ["vending-machines-salt-lake-city-utah"] or ["vending-machines", "salt-lake-city-utah"] if (slugArray.length === 1) { const slug = slugArray[0]; // Check if it starts with "vending-machines-" and the rest is a valid location slug if (slug.startsWith('vending-machines-')) { const locationSlug = slug.replace('vending-machines-', ''); return !!getLocationBySlug(locationSlug); } } else if (slugArray.length === 2 && slugArray[0] === 'vending-machines') { return !!getLocationBySlug(slugArray[1]); } return false; } // Render location page component function renderLocationPage(locationData: any, locationSlug: string) { const structuredData = { "@context": "https://schema.org", "@type": "LocalBusiness", name: businessConfig.name, description: `Rocky Mountain Vending provides high-quality vending machines, vending machine sales, and vending machine repair services to businesses and schools across ${locationData.city}, ${locationData.state}.`, url: `${businessConfig.website}/vending-machines-${locationSlug}`, telephone: businessConfig.phoneFormatted, priceRange: "$$", foundingDate: businessConfig.openingDate, areaServed: { "@type": "City", name: locationData.city, address: { "@type": "PostalAddress", addressLocality: locationData.city, addressRegion: locationData.stateAbbr, postalCode: locationData.zipCode, addressCountry: "US", }, }, geo: { "@type": "GeoCoordinates", latitude: locationData.latitude, longitude: locationData.longitude, }, openingHoursSpecification: [ { "@type": "OpeningHoursSpecification", dayOfWeek: ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"], opens: "08:00", closes: "17:00", }, ], paymentAccepted: "Credit Card, Debit Card, American Express, Discover, MasterCard, Visa", availableLanguage: ["English"], sameAs: [ socialProfiles.linkedin, socialProfiles.facebook, socialProfiles.youtube, socialProfiles.twitter, locationData.chamberUrl, locationData.cityWebsite, ...locationData.localLinks.map((link: any) => link.url), ], }; return ( <>