import { getRootNode, isVisible } from '../../commons/dom';
import { accessibleText } from '../../commons/text';
import { escapeSelector } from '../../core/utils';

function explicitEvaluate(node, options, virtualNode) {
	try {
		if (virtualNode.attr('id')) {
			const root = getRootNode(virtualNode.actualNode);
			const id = escapeSelector(virtualNode.attr('id'));
			const labels = Array.from(root.querySelectorAll(`label[for="${id}"]`));

			if (labels.length) {
				return labels.some(label => {
					// defer to hidden-explicit-label check for better messaging
					if (!isVisible(label)) {
						return true;
					} else {
						return !!accessibleText(label);
					}
				});
			}
		}
		return false;
	} catch (e) {
		return undefined;
	}
}

export default explicitEvaluate;