"use client"; import { ArrowLeft, Calendar, DollarSign, TrendingUp, FileText, Building2 } from 'lucide-react'; import { useRouter } from 'next/navigation'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Badge } from '@/components/ui/badge'; import { Avatar, AvatarFallback } from '@/components/ui/avatar'; import { Button } from '@/components/ui/button'; import { Separator } from '@/components/ui/separator'; import { Project, ProjectStatus } from '@/types/project'; interface ProjectDetailProps { project: Project; } // Función para generar iniciales function getInitials(name: string): string { return name .split(' ') .map(word => word[0]) .join('') .toUpperCase() .slice(0, 2); } // Componente para el badge de estado function StatusBadge({ status }: { status: ProjectStatus }) { if (status === '0') { return ( Borrador ); } if (status === '1') { return ( Abierto ); } if (status === '2') { return ( Cerrado ); } return ( Desconocido ); } /** * Componente de detalle completo de un proyecto * Muestra toda la información disponible del proyecto */ export default function ProjectDetail({ project }: ProjectDetailProps) { const router = useRouter(); const initials = getInitials(project.name); return (
{/* Header */}
{initials}

{project.name}

{project.ref}

{/* Content */}
{/* Main Content */}
{/* Descripción */} {project.description && ( Descripción

{project.description}

)} {/* Progreso */} Progreso del Proyecto
Avance Total {project.progress}%

Estado

{project.status === '0' ? 'Borrador' : project.status === '1' ? 'En Progreso' : 'Finalizado'}

Completado

{project.progress === 100 ? 'Sí' : 'No'}

{/* Presupuesto */} Información Financiera

Presupuesto Total

€{project.budget.toLocaleString('es-ES', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}

Estimado Gastado

€{project.spent.toLocaleString('es-ES', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}

Restante €{(project.budget - project.spent).toLocaleString('es-ES', { minimumFractionDigits: 2, maximumFractionDigits: 2 })}
{/* Sidebar */}
{/* Información General */} Información General {/* Cliente */} {project.client !== 'Sin cliente' && (

Cliente

{project.client}

)} {/* Fecha de Inicio */}

Fecha de Inicio

{new Date(project.startDate).toLocaleDateString('es-ES', { day: 'numeric', month: 'long', year: 'numeric' })}

{/* Fecha de Fin */}

Fecha de Fin

{new Date(project.endDate).toLocaleDateString('es-ES', { day: 'numeric', month: 'long', year: 'numeric' })}

{/* Duración */}

Duración

{Math.ceil((new Date(project.endDate).getTime() - new Date(project.startDate).getTime()) / (1000 * 60 * 60 * 24))} días

{/* Metadatos */} Metadatos

ID del Proyecto

{project.id}

Referencia

{project.ref}

Creado

{new Date(project.createdAt).toLocaleDateString('es-ES', { day: 'numeric', month: 'short', year: 'numeric' })}

Última Actualización

{new Date(project.updatedAt).toLocaleDateString('es-ES', { day: 'numeric', month: 'short', year: 'numeric' })}

); }