import matches from '../matches/matches';
import getRole from '../aria/get-role';
import AbstractVirtualNode from '../../core/base/virtual-node/abstract-virtual-node';
import { getNodeFromTree } from '../../core/utils';

const alwaysTitleElements = ['iframe'];

/**
 * Get title text
 * @param {HTMLElement|VirtualNode}node the node to verify
 * @return {String}
 */
function titleText(node) {
	const vNode =
		node instanceof AbstractVirtualNode ? node : getNodeFromTree(node);

	if (vNode.props.nodeType !== 1 || !node.hasAttr('title')) {
		return '';
	}

	// Some elements return the title even with role=presentation
	// This does appear in any spec, but its remarkably consistent
	if (
		!matches(vNode, alwaysTitleElements) &&
		['none', 'presentation'].includes(getRole(vNode))
	) {
		return '';
	}

	return vNode.attr('title');
}

export default titleText;