import { notFound } from 'next/navigation'; import { loadImageMapping } from '@/lib/wordpress-content'; import { generateSEOMetadata, generateStructuredData } from '@/lib/seo'; import { getPageBySlug } from '@/lib/wordpress-data-loader'; import { cleanWordPressContent } from '@/lib/clean-wordPress-content'; import { ServicesSection } from '@/components/services-section'; import { FAQSection } from '@/components/faq-section'; import { ServiceAreasSection } from '@/components/service-areas-section'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { CheckCircle2, Wrench, Clock, Phone, Shield, MapPin } from 'lucide-react'; import { RepairsImageCarousel } from '@/components/repairs-image-carousel'; import { ContactForm } from '@/components/forms/contact-form'; import { PublicInset, PublicSurface } from '@/components/public-surface'; import Image from 'next/image'; import Link from 'next/link'; import { ArrowRight } from 'lucide-react'; import { businessConfig } from '@/lib/seo-config'; import type { Metadata } from 'next'; const WORDPRESS_SLUG = 'vending-machine-repairs'; export async function generateMetadata(): Promise { const page = getPageBySlug(WORDPRESS_SLUG); if (!page) { return { title: 'Vending Machine Repairs | Rocky Mountain Vending', description: 'Professional vending machine repair services in Utah. Expert technicians for all vending machine types.', }; } return generateSEOMetadata({ title: page.title || 'Vending Machine Repairs', description: page.seoDescription || page.excerpt || '', excerpt: page.excerpt, date: page.date, modified: page.modified, image: page.images?.[0]?.localPath, }); } export default async function RepairsPage() { try { const page = getPageBySlug(WORDPRESS_SLUG); if (!page) { notFound(); } let imageMapping: any = {}; try { imageMapping = loadImageMapping(); } catch (e) { imageMapping = {}; } // Extract FAQs from content const faqs: Array<{ question: string; answer: string }> = []; let contentWithoutFAQs = page.content || ''; let contentWithoutVirtualServices = ''; let virtualServicesContent = ''; if (page.content) { const contentStr = String(page.content); // Extract FAQ items from accordion structure const questionMatches = contentStr.matchAll(/([^<]+)<\/span>/g); const answerMatches = contentStr.matchAll(/
([\s\S]*?)<\/div>\s*<\/div>\s*/g); const questions = Array.from(questionMatches).map(m => m[1].trim()); const answers = Array.from(answerMatches).map(m => { let answer = m[1].trim(); answer = answer.replace(/\n\s*\n/g, '\n').replace(/>\s+<').trim(); return answer; }); // Match questions with answers and clean HTML entities questions.forEach((question, index) => { if (answers[index]) { // Clean HTML entities from questions (e.g., ' -> ') const cleanQuestion = question .replace(/'/g, "'") .replace(/"/g, '"') .replace(/&/g, '&') .replace(/</g, '<') .replace(/>/g, '>') .replace(/ /g, ' ') .trim(); faqs.push({ question: cleanQuestion, answer: answers[index] }); } }); // Remove FAQ section from content if FAQs were found if (faqs.length > 0) { const faqSectionRegex = /]*>.*?Answers\s+To\s+Common\s+Questions.*?<\/h2>[\s\S]*?(?=]*>.*?Virtual\s+Services|]*>.*?Service\s+Area|$)/i; contentWithoutFAQs = contentStr.replace(faqSectionRegex, '').trim(); } // Extract Virtual Services section const virtualServicesRegex = /]*>.*?Virtual\s+Services.*?<\/h2>([\s\S]*?)(?=]*>.*?Service\s+Area|$)/i; const virtualMatch = contentStr.match(virtualServicesRegex); if (virtualMatch) { virtualServicesContent = virtualMatch[1]; // Remove Virtual Services from main content contentWithoutVirtualServices = contentWithoutFAQs.replace(virtualServicesRegex, '').trim(); } else { contentWithoutVirtualServices = contentWithoutFAQs; } } const content = contentWithoutVirtualServices ? (
{cleanWordPressContent(String(contentWithoutVirtualServices), { imageMapping, pageTitle: page.title })}
) : (

No content available.

); let structuredData; try { structuredData = generateStructuredData({ title: page.title || 'Vending Machine Repairs', description: page.seoDescription || page.excerpt || '', url: page.link || page.urlPath || `https://rockymountainvending.com/services/repairs/`, datePublished: page.date, dateModified: page.modified || page.date, type: 'WebPage', }); } catch (e) { structuredData = { '@context': 'https://schema.org', '@type': 'WebPage', headline: page.title || 'Vending Machine Repairs', description: page.seoDescription || '', url: `https://rockymountainvending.com/services/repairs/`, }; } return ( <>