import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card" import { format, parseISO } from "date-fns" import { Badge } from "./ui/badge" interface SimulationMetadataProps { simulation: any } // Función auxiliar para formatear fechas de manera segura const formatDate = (dateString: string) => { try { // Corregir formato incorrecto con :00Z al final if (dateString && dateString.includes('T') && dateString.endsWith(':00Z')) { dateString = dateString.replace(':00Z', 'Z'); } // Intenta parsear la fecha desde ISO const date = parseISO(dateString); return format(date, "PPP 'at' p"); } catch (error) { console.error("Error formatting date:", dateString, error); // Si falla, intenta otro enfoque: crear una fecha a partir del ID de simulación try { if (dateString && dateString.includes("_")) { // Si la fecha es parte del ID (como en "2025-02-11_00-11-23_825") const parts = dateString.split("_"); if (parts.length >= 2) { const datePart = parts[0]; const timePart = parts[1].replace(/-/g, ":"); return `${datePart} at ${timePart}`; } } // Si todo lo anterior falla, usar el ID return dateString || "Date unavailable"; } catch (e) { // Si todo falla, devuelve un marcador de posición return "Date unavailable"; } } }; export function SimulationMetadata({ simulation }: SimulationMetadataProps) { // Manejar el caso donde simulation podría ser null o undefined if (!simulation) { return
Loading...
; } return ( Simulation Details Run on {formatDate(simulation.date || simulation.id)}

Parameter Ranges

Nodes:
{simulation.parameters.numberNodes.min}-{simulation.parameters.numberNodes.max}
Failure Rate:
{simulation.parameters.failureRate.min}%-{simulation.parameters.failureRate.max}%
Block Size:
{simulation.parameters.blockSize.value}
Net Degree:
{simulation.parameters.netDegree.value}
Chi:
{simulation.parameters.chi.value}
Runs:
{simulation.parameters.run.max + 1}

Overall Performance

Success Rate:
= 75 ? "bg-green-500" : simulation.successRate >= 50 ? "bg-yellow-500" : "bg-red-500" } > {simulation.successRate}%
Avg. Missing Samples:
{simulation.avgMissingSamples.toFixed(2)}%
Avg. Nodes Ready:
{simulation.avgNodesReady.toFixed(2)}%
) }