import React, { useRef } from 'react'; import { Link } from 'react-router-dom'; import ImageFlex from './ImageFlex.jsx'; export default function ProjectCard({ project }) { const cardRef = useRef(null); function getStatusClasses(status) { if (!status) return 'bg-slate-100 text-slate-700'; switch (status) { case 'Completed': return 'bg-emerald-100 text-emerald-700'; case 'Ongoing': return 'bg-amber-100 text-amber-700'; case 'Upcoming': return 'bg-sky-100 text-sky-700'; default: return 'bg-slate-100 text-slate-700'; } } function onMove(e) { const el = cardRef.current; if (!el) return; if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) return; const rect = el.getBoundingClientRect(); const x = e.clientX - rect.left; const y = e.clientY - rect.top; const midX = rect.width / 2; const midY = rect.height / 2; const rotateX = ((y - midY) / midY) * -4; const rotateY = ((x - midX) / midX) * 4; el.style.transform = `perspective(800px) rotateX(${rotateX}deg) rotateY(${rotateY}deg)`; } function onLeave() { const el = cardRef.current; if (!el) return; el.style.transform = 'perspective(800px) rotateX(0deg) rotateY(0deg)'; } const hasGallery = Array.isArray(project.gallery) && project.gallery.length > 0; const primaryImage = (typeof project.image === 'string' && project.image.replace(/\.(jpg|jpeg|png|webp)$/i, '')) || null; const galleryImage = hasGallery ? project.gallery[0] : null; const explicitBase = typeof project.imageBase === 'string' ? project.imageBase.replace(/\.(jpg|jpeg|png|webp)$/i, '') : null; const slugFallback = !project.noDetail && project.slug ? `/assets/projects/${project.slug}/gallery-1` : null; const imageBases = [ primaryImage, galleryImage, explicitBase, slugFallback ].filter(Boolean); const hasImage = imageBases.length > 0; return (
{hasImage ? ( <>
['webp', 'jpg', 'jpeg', 'png'].map((ext) => `${base}.${ext}`) )} alt={project.title} className="h-full w-full object-contain transition-transform group-hover:scale-[1.03]" loading="lazy" />
{/* Overlay text content */}

{project.noDetail ? ( {project.title} ) : ( {project.title} )}

{project.location}

{project.projectSize && (

{project.projectSize}

)}
{project.status && ( {project.status} )} {(project.categories || []).slice(0, 2).map((c) => ( {c} ))} {!project.noDetail && ( View details )}
) : ( <>

{project.noDetail ? ( {project.title} ) : ( {project.title} )}

{project.location}

{project.projectSize && (

{project.projectSize}

)}
{project.status && ( {project.status} )} {(project.categories || []).slice(0, 2).map((c) => ( {c} ))} {!project.noDetail && ( View details )}
)}
); }