"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 (
);
}
function DetailItem({ label, value }: { label: string; value: string }) {
return (
{label}:
{value}
);
}