import { Card } from '@/components/ui/card'; import { Badge } from '@/components/ui/badge'; import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar'; import { CheckCircle, XCircle, Flag, Shield, AlertCircle } from 'lucide-react'; import { formatDistanceToNow } from 'date-fns'; interface ActivityCardProps { activity: { id: string; type: 'submission' | 'report' | 'review'; action: 'approved' | 'rejected' | 'reviewed' | 'dismissed' | 'flagged'; entity_type?: string; entity_name?: string; timestamp: string; moderator_id?: string | null; moderator?: { username: string; display_name?: string | null; avatar_url?: string | null; }; }; } export function ActivityCard({ activity }: ActivityCardProps) { const getActionIcon = () => { switch (activity.action) { case 'approved': return ; case 'rejected': return ; case 'reviewed': return ; case 'dismissed': return ; case 'flagged': return ; default: return ; } }; const getActionBadge = () => { const variants = { approved: 'default', rejected: 'destructive', reviewed: 'default', dismissed: 'secondary', flagged: 'secondary', } as const; return ( {activity.action} ); }; const getActivityTitle = () => { const typeLabels = { submission: 'Submission', report: 'Report', review: 'Review', }; const entityTypeLabels = { park: 'Park', ride: 'Ride', photo: 'Photo', company: 'Company', review: 'Review', }; const entityLabel = activity.entity_type ? entityTypeLabels[activity.entity_type as keyof typeof entityTypeLabels] || activity.entity_type : typeLabels[activity.type]; return `${entityLabel} ${activity.action}`; }; const moderatorName = activity.moderator?.display_name || activity.moderator?.username || 'Unknown Moderator'; const moderatorInitial = moderatorName.charAt(0).toUpperCase(); return (
{getActionIcon()}

{getActivityTitle()}

{getActionBadge()}
{moderatorInitial} by {moderatorName} {formatDistanceToNow(new Date(activity.timestamp), { addSuffix: true })}
); }