import React from 'react' import { Play, Square, Clock, Folder, Tag, MoreVertical, CircleDot, ExternalLink, Trash2 } from 'lucide-react' import type { Task } from '../../types/task' import { isTaskRunning, calculateTaskTotalSeconds, formatSecondsToTimer } from '../../lib/timeUtils' import { useAuth } from '../../contexts/AuthContext' import { canDeleteTask } from '../../lib/taskPermissions' interface TaskCardProps { task: Task onToggleTimer: (task: Task) => void onEdit?: (task: Task) => void onOpenHistory?: (task: Task) => void onDelete?: (task: Task) => void isTrackingThis?: boolean currentSeconds?: number } export const TaskCard: React.FC = ({ task, onToggleTimer, onEdit, onOpenHistory, onDelete, isTrackingThis, currentSeconds, }) => { const { user, activeOrg } = useAuth() const running = isTrackingThis ?? isTaskRunning(task) const totalSeconds = currentSeconds !== undefined ? currentSeconds : calculateTaskTotalSeconds(task) const [menuOpen, setMenuOpen] = React.useState(false) const handleDragStart = (e: React.DragEvent) => { e.dataTransfer.setData('text/plain', String(task.id)) e.dataTransfer.effectAllowed = 'move' } return (
{/* Top Row: Project & Quick Status Menu */}
{task.project ? ( {task.project.name} ) : ( Geral )} {task.category && ( {task.category.name} )} {task.externalUrl && ( e.stopPropagation()} title={task.externalUrl} className="inline-flex items-center gap-1 px-2 py-0.5 rounded-md text-[11px] font-medium border border-border bg-surface-raised text-muted hover:text-brand hover:border-brand/40 transition-colors cursor-pointer" > Link )}
{/* More Actions Menu */} {(onEdit || onOpenHistory || (onDelete && canDeleteTask(task, user, activeOrg))) && (
{menuOpen && ( <>
{ e.stopPropagation() setMenuOpen(false) }} />
{onEdit && ( )} {onOpenHistory && ( )} {onDelete && canDeleteTask(task, user, activeOrg) && ( )}
)}
)}
{/* Title */}

onEdit?.(task)} className="font-semibold text-sm text-foreground hover:text-brand transition-colors cursor-pointer line-clamp-2 mb-1.5" > {task.title}

{/* Description preview */} {task.description && (

{task.description}

)} {/* Footer: User Avatar & Live Timer Controls */}
{/* Assignee / Creator */}
{task.user ? (
{task.user.name ? task.user.name.charAt(0) : task.user.email.charAt(0)}
) : (
)} {task.user?.name || task.user?.email?.split('@')[0] || 'Livre'}
{/* Timer button & display */}
{ e.stopPropagation() onOpenHistory?.(task) }} title="Clique para ver o histórico de tempo" className={`flex items-center gap-1 px-2 py-1 rounded-md text-[11px] font-mono transition-colors cursor-pointer hover:opacity-85 ${ running ? 'bg-teal-500/15 text-teal-700 dark:bg-brand/20 dark:text-teal-300 font-semibold' : 'bg-surface-sunken text-muted' }`} > {formatSecondsToTimer(totalSeconds)}
) }