"use client"; import { FileText, Calendar, User, FolderOpen, Tag, Clock, AlertTriangle, CheckCircle2, Info, Hash } from "lucide-react"; import Link from "next/link"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; import { Badge } from "@/components/ui/badge"; import { Separator } from "@/components/ui/separator"; import { Task, TASK_STATUS_CONFIG, TASK_PRIORITY_CONFIG } from "@/types/task"; import { Project } from "@/types/project"; interface TaskInfoProps { task: Task; project: Project | null; } // Formatear fecha completa function formatFullDate(dateString: string | null): string { if (!dateString) return 'No definida'; return new Date(dateString).toLocaleDateString('es-ES', { weekday: 'long', day: '2-digit', month: 'long', year: 'numeric', }); } // Verificar si la tarea está vencida function isOverdue(task: Task): boolean { const endDate = task.endDate || task.plannedEndDate; if (!endDate) return false; return new Date(endDate) < new Date() && task.status !== '2'; } // Item de información function InfoItem({ icon: Icon, label, value, className = "", valueClassName = "" }: { icon: React.ElementType; label: string; value: React.ReactNode; className?: string; valueClassName?: string; }) { return (

{label}

{value}
); } export function TaskInfo({ task, project }: TaskInfoProps) { const overdue = isOverdue(task); const statusConfig = TASK_STATUS_CONFIG[task.status]; const priorityConfig = TASK_PRIORITY_CONFIG[task.priority]; return (
{/* Descripción */} Descripción {task.description ? (

{task.description}

) : (

Esta tarea no tiene descripción.

)}
{/* Información General */} Información General Detalles básicos de la tarea {task.ref}} /> {task.status === '2' && } {statusConfig.label} } /> {priorityConfig.label} ) : ( Sin prioridad asignada ) } /> {project.name} ) : ( Proyecto #{task.projectId} ) } /> {task.parentTaskId && task.parentTaskId > 0 && ( Ver tarea padre #{task.parentTaskId} } /> )} {/* Fechas y Tiempos */} Fechas y Tiempos Cronograma y dedicación {(task.startDate || task.endDate) && ( <> {task.startDate && ( )} {task.endDate && ( )} )} 0 ? `${task.plannedHours} horas` : 'No estimado'} /> 0 ? `${task.workedHours} horas` : 'Sin registrar'} /> {/* Metadatos */} Metadatos Información de seguimiento y auditoría
0 ? `Usuario #${task.createdBy}` : 'Sistema'} /> 0 ? `Posición ${task.order}` : 'Sin ordenar'} />
{task.budget > 0 && ( <> )}
); }