import type { Assignment, AssignmentStatus } from '@/services/goals'; import { GoalProgressBar } from './GoalProgressBar'; interface GoalAssignmentCardProps { assignment: Assignment; onUpdateProgress?: () => void; onStatusChange?: (status: AssignmentStatus) => void; onDelete?: () => void; isUpdating?: boolean; isDeleting?: boolean; compact?: boolean; } export function GoalAssignmentCard({ assignment, onUpdateProgress, onStatusChange, onDelete, isUpdating = false, isDeleting = false, compact = false, }: GoalAssignmentCardProps) { const getStatusColor = (status: AssignmentStatus) => { const colors: Record = { active: 'bg-blue-100 text-blue-800', achieved: 'bg-green-100 text-green-800', failed: 'bg-red-100 text-red-800', cancelled: 'bg-gray-100 text-gray-800', }; return colors[status] || 'bg-gray-100 text-gray-800'; }; const formatDate = (dateStr: string | null) => { if (!dateStr) return 'N/A'; return new Date(dateStr).toLocaleDateString(); }; const getDaysRemaining = (endDate: string | null) => { if (!endDate) return null; const end = new Date(endDate); const now = new Date(); const diff = Math.ceil((end.getTime() - now.getTime()) / (1000 * 60 * 60 * 24)); return diff; }; const target = assignment.customTarget ?? assignment.definition?.targetValue ?? 0; const unit = assignment.definition?.unit || ''; const goalName = assignment.definition?.name || 'Unknown Goal'; const daysRemaining = getDaysRemaining(assignment.definition?.endsAt || null); const userName = assignment.user ? `${assignment.user.firstName || ''} ${assignment.user.lastName || ''}`.trim() || assignment.user.email : 'Unknown User'; if (compact) { return (
{goalName} {assignment.status}

{userName}

View
); } return (

{goalName}

Assigned to: {userName}

{assignment.customTarget && (

Custom target: {assignment.customTarget.toLocaleString()} {unit}

)}
{onStatusChange ? ( ) : ( {assignment.status} )} {daysRemaining !== null && daysRemaining > 0 && ( {daysRemaining} days left )} {daysRemaining !== null && daysRemaining <= 0 && ( Ended )}
{/* Progress Bar */}
{/* Duration Info */}
Start: {formatDate(assignment.definition?.startsAt || null)} End: {formatDate(assignment.definition?.endsAt || null)}
{assignment.notes && (
{assignment.notes}
)} {/* Actions */}
{assignment.lastUpdatedAt && ( Last updated: {formatDate(assignment.lastUpdatedAt)} )}
{assignment.status === 'active' && onUpdateProgress && ( )} View Details {onDelete && ( )}
); } export default GoalAssignmentCard;