'use client' import React, { useEffect, useState } from 'react'; import Link from 'next/link'; import { ChevronRight } from 'lucide-react'; import { FacultyService, TeamMember } from '../../lib/facultyData'; interface TeamListingProps { title?: string; onMemberClick?: (member: TeamMember) => void; } const GUIDES_FRIENDS_PATRONS_CATEGORIES = ['GUIDES', 'FRIENDS', 'PATRONS']; const NON_CLICKABLE_CATEGORIES = ['TRAINEE_FELLOW', 'SUPPORT_TEAM', 'GUIDES', 'FRIENDS', 'PATRONS']; const TeamListing: React.FC = ({ title = "Our Team", onMemberClick }) => { const [teamMembers, setTeamMembers] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { const loadFacultyData = async () => { try { setLoading(true); const faculty = await FacultyService.getAllFaculty(); setTeamMembers(faculty); setError(null); } catch (err) { console.error('Failed to load faculty data:', err); setError('Failed to load faculty data. Please try again later.'); } finally { setLoading(false); } }; loadFacultyData(); }, []); // Active faculty members only const facultyMembers = teamMembers.filter(member => member.category === 'FACULTY' && member.status !== 'RETIRED' ); // Active support team only const supportTeam = teamMembers.filter(member => member.category === 'SUPPORT_TEAM' && member.status !== 'RETIRED' ); // Active trainees and fellows only const traineesAndFellows = teamMembers.filter(member => member.category === 'TRAINEE_FELLOW' && member.status !== 'RETIRED' ); // Guides, Friends, Patrons — all three categories in one section const guidesFriendsPatrons = teamMembers.filter(member => GUIDES_FRIENDS_PATRONS_CATEGORIES.includes(member.category) && member.status !== 'RETIRED' ); // Alumni = RETIRED (any category) + RESIGNED (any status) const alumniStaff = teamMembers.filter(member => member.status === 'RETIRED' || member.category === 'RESIGNED' ); const handleMemberClick = (member: TeamMember) => { if (onMemberClick) { onMemberClick(member); } else { window.location.href = `/faculty/${member.professorId}`; } }; if (loading) { return (

Loading faculty data...

); } if (error) { return (

{error}

); } const TeamMemberCard: React.FC<{ member: TeamMember }> = ({ member }) => { const [imageError, setImageError] = useState(false); const [imageLoading, setImageLoading] = useState(true); const isNonClickable = NON_CLICKABLE_CATEGORIES.includes(member.category); const isRetired = member.status === 'RETIRED'; const isResigned = member.category === 'RESIGNED'; // Check if image URL is valid and not a default placeholder const hasValidImage = member.image && member.image.trim() !== '' && !member.image.includes('default-avatar') && !member.image.includes('placeholder.') && !member.image.includes('robot') && !( member.image.endsWith('/profile-image') || member.image.includes('/profile-image?') || member.image === 'https://via.placeholder.com/400' ); // Don't show images for non-clickable categories const shouldShowImage = !isNonClickable && hasValidImage; const handleImageError = () => { setImageError(true); setImageLoading(false); }; const handleImageLoad = () => { setImageLoading(false); }; return (
!isNonClickable && handleMemberClick(member)} > {/* Only show image section for clickable categories (Faculty + Alumni) */} {!isNonClickable && (
{shouldShowImage && !imageError ? ( <> {imageLoading && (
)} {member.name} ) : (
)}
)}
{/* Status badge for alumni */} {(isRetired || isResigned) && (
{isResigned ? 'Resigned' : 'Retired'}
)}

{member.name}

{member.position}

{!isNonClickable && ( <> {member.department && (

{member.department}

)} {member.specialty && (

{member.specialty}

)} )}
); }; return (
{/* Breadcrumb Section */}

{title}

Meet our dedicated team of medical professionals, researchers, and support staff committed to advancing healthcare, education, and patient outcomes at Christian Medical College, Vellore

{/* Faculty Section */} {facultyMembers.length > 0 && (

Faculty Members

Our experienced faculty members leading medical education and research

{facultyMembers.map((member) => ( ))}
)} {/* Faculty Alumni Section — RETIRED + RESIGNED */} {alumniStaff.length > 0 && (

Faculty Alumni

Honoring our retired and former faculty members for their dedicated service

{alumniStaff.map((member) => ( ))}
)} {/* Support Team Section */} {supportTeam.length > 0 && (

Support Team

Clinical Support Staff — Essential team members providing specialised support services

Administrative & Technical Support — Dedicated professionals ensuring smooth operations

{supportTeam.map((member) => ( ))}
)} {/* Guides / Friends / Patrons Section */} {guidesFriendsPatrons.length > 0 && (

Guides / Friends / Patrons

Guides — Mentors and senior professionals who have shaped our department

Friends & Patrons — Valued supporters and well-wishers of our institution

{guidesFriendsPatrons.map((member) => ( ))}
)} {/* Trainees & Fellows Section */} {traineesAndFellows.length > 0 && (

Trainees & Fellows

Medical trainees, residents, and fellows advancing their skills and contributing to patient care

{traineesAndFellows.map((member) => ( ))}
)} {/* No data message */} {teamMembers.length === 0 && !loading && (

No Faculty Data Available

Faculty information is currently being updated. Please check back later or contact administration.

)}
); }; export default TeamListing;