import React from "react"; import { HoverCard, HoverCardContent, HoverCardTrigger, } from "@/components/ui/hover-card"; import { Badge } from "@/components/ui/badge"; import { Calendar, MapPin, Users, FileText } from "lucide-react"; import { format, parseISO, isValid } from "date-fns"; const statusColors = { Draft: "bg-slate-100 text-slate-700 border border-slate-300", Active: "bg-emerald-50 text-emerald-700 border border-emerald-200", Pending: "bg-purple-50 text-purple-700 border border-purple-200", Confirmed: "bg-[#0A39DF]/10 text-[#0A39DF] border border-[#0A39DF]/30", Assigned: "bg-amber-50 text-amber-700 border border-amber-200", Completed: "bg-slate-100 text-slate-600 border border-slate-300", Canceled: "bg-red-50 text-red-700 border border-red-200", Cancelled: "bg-red-50 text-red-700 border border-red-200" }; // Helper function to safely format dates const safeFormatDate = (dateString, formatStr) => { if (!dateString) return "-"; try { const date = typeof dateString === 'string' ? parseISO(dateString) : new Date(dateString); if (!isValid(date)) return "-"; return format(date, formatStr); } catch { return "-"; } }; export default function EventHoverCard({ event, children }) { const assignedCount = event.assigned_staff?.length || event.assigned || 0; const requestedCount = event.requested || 0; const remainingSlots = requestedCount - assignedCount; return ( {children}

{event.event_name}

{event.business_name || "Company Name"}

{event.status}
{safeFormatDate(event.date, "MMMM dd, yyyy")}
{event.event_location && (
{event.event_location}
)} {event.po && (
PO: {event.po}
)}
Staff Assignment
{assignedCount} / {requestedCount}
{remainingSlots > 0 && (
{remainingSlots} staff member{remainingSlots !== 1 ? 's' : ''} still needed
)} {remainingSlots === 0 && requestedCount > 0 && (
✓ Fully staffed
)} {event.assigned_staff && event.assigned_staff.length > 0 && (

Assigned Staff:

{event.assigned_staff.map((staff, idx) => (
{staff.staff_name?.charAt(0) || '?'}

{staff.staff_name}

{staff.position &&

{staff.position}

}
{staff.confirmed && ( Confirmed )}
))}
)} {event.notes && (

Notes:

{event.notes}

)}
); }