import { AnyNodeId, useScene } from "@pascal-app/core";
import { ChevronDown, ChevronRight } from "lucide-react";
import { cn } from "@/lib/utils";
import { BuildingTreeNode } from "./building-tree-node";
import { CeilingTreeNode } from "./ceiling-tree-node";
import { ItemTreeNode } from "./item-tree-node";
import { LevelTreeNode } from "./level-tree-node";
import { SlabTreeNode } from "./slab-tree-node";
import { WallTreeNode } from "./wall-tree-node";
interface TreeNodeProps {
nodeId: AnyNodeId;
depth?: number;
}
export function TreeNode({ nodeId, depth = 0 }: TreeNodeProps) {
const node = useScene((state) => state.nodes[nodeId]);
if (!node) return null;
switch (node.type) {
case "building":
return ;
case "ceiling":
return ;
case "level":
return ;
case "slab":
return ;
case "wall":
return ;
case "item":
return ;
default:
return null;
}
}
interface TreeNodeWrapperProps {
icon: React.ReactNode;
label: string;
depth: number;
hasChildren: boolean;
expanded: boolean;
onToggle: () => void;
onClick: () => void;
onMouseEnter?: () => void;
onMouseLeave?: () => void;
actions?: React.ReactNode;
children?: React.ReactNode;
isSelected?: boolean;
isHovered?: boolean;
}
export function TreeNodeWrapper({
icon,
label,
depth,
hasChildren,
expanded,
onToggle,
onClick,
onMouseEnter,
onMouseLeave,
actions,
children,
isSelected,
isHovered,
}: TreeNodeWrapperProps) {
return (
{icon}
{label}
{actions && (
{actions}
)}
{expanded && children}
);
}