"use client" import { useState, useEffect } from "react" import { GalleryItem } from "@/types/cms" import Image from "next/image" import { cn } from "@/lib/utils" interface HeroCarouselProps { images: GalleryItem[] children?: React.ReactNode } export function HeroCarousel({ images, children }: HeroCarouselProps) { const [current, setCurrent] = useState(0) useEffect(() => { if (images.length <= 1) return const timer = setInterval(() => { setCurrent((prev) => (prev + 1) % images.length) }, 5000) return () => clearInterval(timer) }, [images.length]) const getImageUrl = (item: GalleryItem) => { if (item.image_url) return item.image_url if (item.video_url) { const regExp = /^.*(youtu.be\/|v\/|u\/\w\/|embed\/|watch\?v=|&v=)([^#&?]*).*/ const match = item.video_url.match(regExp) const id = (match && match[2].length === 11) ? match[2] : null if (id) return `https://img.youtube.com/vi/${id}/maxresdefault.jpg` } return null } // Fallback if no images if (!images || images.length === 0) { return (
{children}
) } return ( <> {images.map((img, idx) => { const displayImage = getImageUrl(img) if (!displayImage) return null; return (
Hero Image
) })} {/* Indicators */} {images.length > 1 && (
{images.map((_, idx) => (
)} {children} ) }