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 { Breadcrumbs } from "@/components/breadcrumbs" 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, path: "/services/repairs", }) } 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 ( <>