import * as THREE from 'three';
export type NodeType = 'tile' | 'unit' | 'feature' | 'highlight' | 'effect';
export interface SceneGraphNode {
    /** Unique node identifier */
    id: string;
    /** Node type classification */
    type: NodeType;
    /** Three.js object */
    mesh: THREE.Object3D;
    /** World position */
    position: {
        x: number;
        y: number;
        z: number;
    };
    /** Grid position */
    gridPosition: {
        x: number;
        z: number;
    };
    /** Optional metadata */
    metadata?: Record<string, unknown>;
}
export interface UseSceneGraphReturn {
    /** Reference to the nodes map */
    nodesRef: React.MutableRefObject<Map<string, SceneGraphNode>>;
    /** Add a node to the scene */
    addNode: (node: SceneGraphNode) => void;
    /** Remove a node from the scene */
    removeNode: (id: string) => void;
    /** Get a node by ID */
    getNode: (id: string) => SceneGraphNode | undefined;
    /** Update node position */
    updateNodePosition: (id: string, x: number, y: number, z: number) => void;
    /** Update node grid position */
    updateNodeGridPosition: (id: string, gridX: number, gridZ: number) => void;
    /** Get node at grid position */
    getNodeAtGrid: (x: number, z: number, type?: NodeType) => SceneGraphNode | undefined;
    /** Get all nodes of a specific type */
    getNodesByType: (type: NodeType) => SceneGraphNode[];
    /** Get all nodes within a bounding box */
    getNodesInBounds: (minX: number, maxX: number, minZ: number, maxZ: number) => SceneGraphNode[];
    /** Clear all nodes */
    clearNodes: () => void;
    /** Count nodes by type */
    countNodes: (type?: NodeType) => number;
}
/**
 * Hook for managing the 3D scene graph
 *
 * @example
 * ```tsx
 * const { addNode, removeNode, getNodeAtGrid } = useSceneGraph();
 *
 * // Add a tile
 * addNode({
 *     id: 'tile-0-0',
 *     type: 'tile',
 *     mesh: tileMesh,
 *     position: { x: 0, y: 0, z: 0 },
 *     gridPosition: { x: 0, z: 0 }
 * });
 * ```
 */
export declare function useSceneGraph(): UseSceneGraphReturn;
export default useSceneGraph;
