'use strict';
const {getStaticValue} = require('eslint-utils');

/**
Get the property value of a `MemberExpression` node.

@param {Node} node - The `MemberExpression` node.
@param {Scope} [scope] - The scope to start finding the variable. Optional. If this scope was given, it tries to resolve identifier references which are in the given node as much as possible.
*/
function getPropertyName(node, scope) {
	const {type, property, computed} = node;
	/* istanbul ignore next */
	if (type !== 'MemberExpression') {
		return;
	}

	if (!computed) {
		if (property.type === 'Identifier') {
			return property.name;
		}

		/* istanbul ignore next: It could be `PrivateIdentifier`(ESTree) or `PrivateName`(Babel) when it's in `class` */
		return;
	}

	const result = getStaticValue(property, scope);
	return result && result.value;
}

module.exports = getPropertyName;