import { notFound } from "next/navigation" import { generateRegistryMetadata, generateRegistryStructuredData, } from "@/lib/seo" import { getPageBySlug } from "@/lib/wordpress-data-loader" 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, 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, PublicPageHeader, PublicSectionHeader, 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 generateRegistryMetadata("repairs", { 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() } // Extract FAQs from content const faqs: Array<{ question: string; answer: string }> = [] let virtualServicesContent = "" if (page.content) { const contentStr = String(page.content) let strippedContent = contentStr // 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 strippedContent = contentStr.replace(faqSectionRegex, "").trim() } // Extract Virtual Services section const virtualServicesRegex = /]*>.*?Virtual\s+Services.*?<\/h2>([\s\S]*?)(?=]*>.*?Service\s+Area|$)/i const virtualMatch = strippedContent.match(virtualServicesRegex) if (virtualMatch) { virtualServicesContent = virtualMatch[1] } } const structuredData = generateRegistryStructuredData("repairs", { datePublished: page.date, dateModified: page.modified || page.date, }) const excerpt = String(page.excerpt || "") .replace(/<[^>]+>/g, " ") .replace(/\s+/g, " ") .trim() const surfaceCardClass = "rounded-[var(--public-surface-radius)] border border-border/70 bg-[linear-gradient(180deg,rgba(255,255,255,0.98),rgba(255,251,243,0.96))] shadow-[var(--public-surface-shadow)]" const insetCardClass = "rounded-[var(--public-inset-radius)] border border-border/60 bg-white/95 shadow-[0_10px_28px_rgba(15,23,42,0.06)]" return ( <>