import React, { useEffect, useState } from 'react';
import { Link } from 'react-router-dom';
import { useAuth } from '../context/AuthContext';
import api from '../utils/api';
import { Card } from '../components/ui/card';
import { Button } from '../components/ui/button';
import { Badge } from '../components/ui/badge';
import Navbar from '../components/Navbar';
import MemberFooter from '../components/MemberFooter';
import { Calendar, User, CheckCircle, Clock, AlertCircle, Mail, Users, Image, FileText, DollarSign, Scale } from 'lucide-react';
import { toast } from 'sonner';
const Dashboard = () => {
const { user, resendVerificationEmail, refreshUser } = useAuth();
const [events, setEvents] = useState([]);
const [loading, setLoading] = useState(true);
const [resendLoading, setResendLoading] = useState(false);
useEffect(() => {
fetchUpcomingEvents();
}, []);
const fetchUpcomingEvents = async () => {
try {
const response = await api.get('/events');
const upcomingEvents = response.data.slice(0, 3);
setEvents(upcomingEvents);
} catch (error) {
console.error('Failed to fetch events:', error);
} finally {
setLoading(false);
}
};
const handleResendVerification = async () => {
setResendLoading(true);
try {
await resendVerificationEmail();
toast.success('Verification email sent! Please check your inbox.');
} catch (error) {
const errorMessage = error.response?.data?.detail || 'Failed to send verification email';
// If email is already verified, refresh user data to update UI
if (errorMessage === 'Email is already verified') {
try {
await refreshUser();
toast.success('Your email is already verified!');
} catch (refreshError) {
toast.error('Email is already verified. Please refresh the page.');
}
} else {
toast.error(errorMessage);
}
} finally {
setResendLoading(false);
}
};
const getStatusBadge = (status) => {
const statusConfig = {
pending_email: { icon: Clock, label: 'Pending Email', className: 'bg-orange-100 text-orange-700' },
pending_approval: { icon: Clock, label: 'Pending Approval', className: 'bg-gray-200 text-gray-700' },
pre_approved: { icon: CheckCircle, label: 'Pre-Approved', className: 'bg-[#81B29A] text-white' },
payment_pending: { icon: AlertCircle, label: 'Payment Pending', className: 'bg-orange-500 text-white' },
active: { icon: CheckCircle, label: 'Active', className: 'bg-[#81B29A] text-white' },
inactive: { icon: AlertCircle, label: 'Inactive', className: 'bg-gray-400 text-white' }
};
const config = statusConfig[status] || statusConfig.inactive;
const Icon = config.icon;
return (
Here's an overview of your membership status and upcoming events.
Please verify your email address to complete your registration. Check your inbox for the verification link.
{getStatusMessage(user?.status)}
{user?.email}
Role
{user?.role}
Member Since
{user?.created_at ? new Date(user.created_at).toLocaleDateString() : 'N/A'}
Membership Period
{new Date(user.subscription_start_date).toLocaleDateString()} - {new Date(user.subscription_end_date).toLocaleDateString()}
Days Remaining
{Math.max(0, Math.ceil((new Date(user.subscription_end_date) - new Date()) / (1000 * 60 * 60 * 24)))} days
Loading events...
) : events.length > 0 ? ({new Date(event.start_at).toLocaleDateString()} at{' '} {new Date(event.start_at).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' })}
{event.location}
No upcoming events at the moment.
Check back later for new events!
Your membership application is being reviewed by our admin team. You'll be notified once approved!
Great news! Your membership application has been approved. Complete your payment to activate your membership and gain full access to all member benefits.