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 } const formatDate = (dateString: string) => { try { if (dateString && dateString.includes('T') && dateString.endsWith(':00Z')) { dateString = dateString.replace(':00Z', 'Z'); } const date = parseISO(dateString); return format(date, "PPP 'at' p"); } catch (error) { console.error("Error formatting date:", dateString, error); try { if (dateString && dateString.includes("_")) { const parts = dateString.split("_"); if (parts.length >= 2) { const datePart = parts[0]; const timePart = parts[1].replace(/-/g, ":"); return `${datePart} at ${timePart}`; } } return dateString || "Date unavailable"; } catch (e) { return "Date unavailable"; } } }; export function SimulationMetadata({ simulation }: SimulationMetadataProps) { 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)}%
) }