import { createGrid, getRectStack } from './get-rect-stack';
import { getNodeFromTree } from '../../core/utils';
import cache from '../../core/base/cache';

/**
 * Return all elements that are at the center bounding rect of the passed in node.
 * @method getElementStack
 * @memberof axe.commons.dom
 * @param {Node} node
 * @return {Node[]}
 */
function getElementStack(node) {
	if (!cache.get('gridCreated')) {
		createGrid();
		cache.set('gridCreated', true);
	}

	const vNode = getNodeFromTree(node);
	const grid = vNode._grid;

	if (!grid) {
		return [];
	}

	return getRectStack(grid, vNode.boundingClientRect);
}

export default getElementStack;