"use client"; import { Box } from "lucide-react"; import { Badge } from "@/components/ui/badge"; import { Separator } from "@/components/ui/separator"; import { Sheet, SheetContent, SheetHeader, SheetTitle, } from "@/components/ui/sheet"; import type { K8sNodeMetadata, ProxyMetadata, ServerMetadata, TopologyNodeData, } from "@/lib/topology-types"; interface NodeDetailsPanelProps { node: TopologyNodeData | null; open: boolean; onClose: () => void; } export function NodeDetailsPanel({ node, open, onClose, }: NodeDetailsPanelProps) { if (!node) return null; return ( {node.label}
{/* Type and Status */}
{node.type === "server" ? "Minecraft Server" : node.type === "proxy" ? "Reverse Proxy" : "Kubernetes Node"} {node.status}
{node.type === "server" && ( )} {node.type === "proxy" && ( )} {node.type === "k8s-node" && ( )}
); } function ServerDetails({ metadata }: { metadata: ServerMetadata }) { const { server, podCount, readyPods, pods, k8sNodes, connectedProxies } = metadata; return (
{server.description && ( )} {k8sNodes.length > 0 && (
Running on {k8sNodes.length} K8s node(s):
{k8sNodes.map((nodeName) => (
{nodeName}
))}
)} {pods.map((pod) => (
{pod.name}
Status: {pod.status} • {pod.ready}
Restarts: {pod.restarts}
{pod.nodeName && (
Node: {pod.nodeName}
)}
))}
{connectedProxies.length > 0 && (
{connectedProxies.map((proxyId) => (
{proxyId}
))}
)}
); } function ProxyDetails({ metadata }: { metadata: ProxyMetadata }) { const { proxy, podCount, readyPods, pods, k8sNodes, connectedServers } = metadata; return (
{proxy.description && ( )} {k8sNodes.length > 0 && (
Running on {k8sNodes.length} K8s node(s):
{k8sNodes.map((nodeName) => (
{nodeName}
))}
)} {pods.map((pod) => (
{pod.name}
Status: {pod.status} • {pod.ready}
Restarts: {pod.restarts}
{pod.nodeName && (
Node: {pod.nodeName}
)}
))}
{connectedServers.length > 0 && (
{connectedServers.map((serverId) => (
{serverId}
))}
)}
); } function K8sNodeDetails({ metadata }: { metadata: K8sNodeMetadata }) { const { node, podCount, serverPods, proxyPods } = metadata; return (
{node.version && } {node.internalIP && ( )} {node.externalIP && ( )} {node.hostname && } {serverPods.length > 0 && (

Server Pods:

{serverPods.map((podName) => (
{podName}
))}
)} {proxyPods.length > 0 && (

Proxy Pods:

{proxyPods.map((podName) => (
{podName}
))}
)}
); } function DetailSection({ title, children, }: { title: string; children: React.ReactNode; }) { return (

{title}

{children}
); } function DetailItem({ label, value }: { label: string; value: string }) { return (
{label}: {value}
); }