import React, { useState, useEffect } from 'react';
import { useParams, useNavigate } from 'react-router-dom';
import api from '../../utils/api';
import Navbar from '../../components/Navbar';
import MemberFooter from '../../components/MemberFooter';
import { Card } from '../../components/ui/card';
import { Button } from '../../components/ui/button';
import { Dialog, DialogContent } from '../../components/ui/dialog';
import { Badge } from '../../components/ui/badge';
import { Image as ImageIcon, Calendar, MapPin, ArrowLeft, X, ChevronLeft, ChevronRight } from 'lucide-react';
import { useToast } from '../../hooks/use-toast';
import moment from 'moment';
const EventGallery = () => {
const { eventId } = useParams();
const navigate = useNavigate();
const [events, setEvents] = useState([]);
const [selectedEvent, setSelectedEvent] = useState(null);
const [galleryImages, setGalleryImages] = useState([]);
const [selectedImageIndex, setSelectedImageIndex] = useState(null);
const [loading, setLoading] = useState(true);
const [galleryLoading, setGalleryLoading] = useState(false);
const { toast } = useToast();
useEffect(() => {
fetchEventsWithGalleries();
}, []);
useEffect(() => {
if (eventId) {
fetchEventGallery(eventId);
}
}, [eventId]);
const fetchEventsWithGalleries = async () => {
try {
const response = await api.get('/members/gallery');
setEvents(response.data);
// If there's an eventId in URL, find that event
if (eventId) {
const event = response.data.find(e => e.id === eventId);
if (event) {
setSelectedEvent(event);
}
}
} catch (error) {
console.error('Failed to fetch events:', error);
toast({
title: "Error",
description: "Failed to load event galleries. Please try again.",
variant: "destructive"
});
} finally {
setLoading(false);
}
};
const fetchEventGallery = async (id) => {
setGalleryLoading(true);
try {
const response = await api.get(`/events/${id}/gallery`);
setGalleryImages(response.data);
} catch (error) {
console.error('Failed to fetch gallery:', error);
toast({
title: "Error",
description: "Failed to load gallery images. Please try again.",
variant: "destructive"
});
} finally {
setGalleryLoading(false);
}
};
const handleEventClick = (event) => {
setSelectedEvent(event);
navigate(`/members/gallery/${event.id}`);
fetchEventGallery(event.id);
};
const handleBackToEvents = () => {
setSelectedEvent(null);
setGalleryImages([]);
navigate('/members/gallery');
};
const openLightbox = (index) => {
setSelectedImageIndex(index);
};
const closeLightbox = () => {
setSelectedImageIndex(null);
};
const nextImage = () => {
if (selectedImageIndex !== null) {
setSelectedImageIndex((selectedImageIndex + 1) % galleryImages.length);
}
};
const previousImage = () => {
if (selectedImageIndex !== null) {
setSelectedImageIndex((selectedImageIndex - 1 + galleryImages.length) % galleryImages.length);
}
};
const EventCard = ({ event }) => (
{event.description}
) : (
{event.title}
{event.description && (
Browse photos from past LOAF events.
Loading galleries...
Event photos will appear here once admins upload them.
Loading images...
{image.caption}
Photos from this event will appear here once uploaded.