import React, { useState, useEffect, useRef } from 'react'; import ImageFlex from './ImageFlex.jsx'; export default function ImageSlider({ images, projectTitle }) { const [currentIndex, setCurrentIndex] = useState(0); const [isFullscreen, setIsFullscreen] = useState(false); const intervalRef = useRef(null); // Auto-advance every 4 seconds useEffect(() => { if (images.length <= 1) return; if (intervalRef.current) clearInterval(intervalRef.current); intervalRef.current = setInterval(() => { setCurrentIndex((prev) => (prev + 1) % images.length); }, 4000); return () => { if (intervalRef.current) clearInterval(intervalRef.current); }; }, [images.length]); // Pause on hover/focus const pauseAutoPlay = () => { if (intervalRef.current) clearInterval(intervalRef.current); }; const resumeAutoPlay = () => { if (images.length <= 1) return; if (intervalRef.current) clearInterval(intervalRef.current); intervalRef.current = setInterval(() => { setCurrentIndex((prev) => (prev + 1) % images.length); }, 4000); }; const goToNext = () => { pauseAutoPlay(); setCurrentIndex((prev) => (prev + 1) % images.length); resumeAutoPlay(); }; const goToPrev = () => { pauseAutoPlay(); setCurrentIndex((prev) => (prev - 1 + images.length) % images.length); resumeAutoPlay(); }; const goToSlide = (index) => { pauseAutoPlay(); setCurrentIndex(index); resumeAutoPlay(); }; const openFullscreen = () => { setIsFullscreen(true); pauseAutoPlay(); }; const closeFullscreen = () => { setIsFullscreen(false); resumeAutoPlay(); }; // Keyboard navigation in fullscreen (auto-play stays paused in fullscreen) useEffect(() => { if (!isFullscreen) return; const handleKeyDown = (e) => { if (e.key === 'Escape') { setIsFullscreen(false); resumeAutoPlay(); } else if (e.key === 'ArrowLeft') { setCurrentIndex((prev) => (prev - 1 + images.length) % images.length); } else if (e.key === 'ArrowRight') { setCurrentIndex((prev) => (prev + 1) % images.length); } }; window.addEventListener('keydown', handleKeyDown); return () => window.removeEventListener('keydown', handleKeyDown); }, [isFullscreen, images.length]); if (!images || images.length === 0) return null; const currentImage = images[currentIndex]; return ( <>