import { getNodeFromTree } from '../../core/utils';
import AbstractVirtuaNode from '../../core/base/virtual-node/abstract-virtual-node';
import getImplicitRole from './implicit-role';
import getElementSpec from '../standards/get-element-spec';

/**
 * @description validate if a given role is an allowed ARIA role for the supplied node
 * @method isAriaRoleAllowedOnElement
 * @param {HTMLElement} node the node to verify
 * @param {String} role aria role to check
 * @return {Boolean} retruns true/false
 */
function isAriaRoleAllowedOnElement(node, role) {
	const vNode =
		node instanceof AbstractVirtuaNode ? node : getNodeFromTree(node);
	const implicitRole = getImplicitRole(vNode);

	// always allow the explicit role to match the implicit role
	if (role === implicitRole) {
		return true;
	}

	const spec = getElementSpec(vNode);

	if (Array.isArray(spec.allowedRoles)) {
		return spec.allowedRoles.includes(role);
	}

	return !!spec.allowedRoles;
}

export default isAriaRoleAllowedOnElement;