"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 { Avatar, AvatarFallback } from '@/components/ui/avatar';
import { Button } from '@/components/ui/button';
import { Separator } from '@/components/ui/separator';
import { ProjectStatusBadge } from '@/components/ui/project-status-badge';
import { Project } 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 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' && (
)}
{/* 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}
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'
})}
);
}