// NOTICE: This file is generated by Rollup. To modify it,
// please instead edit the ESM counterpart and rebuild with Rollup (npm run build).
'use strict';

const valueParser = require('postcss-value-parser');
const keywords = require('../reference/keywords.cjs');
const getDimension = require('./getDimension.cjs');
const isStandardSyntaxValue = require('./isStandardSyntaxValue.cjs');
const isVariable = require('./isVariable.cjs');

/** @typedef {import('postcss-value-parser').Node} Node */

/**
 * Get the animation name within an `animation` shorthand property value.
 *
 * @param {string} value
 *
 * @returns {Node[]}
 */
function findAnimationName(value) {
	/** @type {Node[]} */
	const animationNames = [];

	const valueNodes = valueParser(value);
	const { nodes } = valueNodes;

	// Handle `inherit`, `initial` and etc
	if (nodes.length === 1 && nodes[0] && keywords.basicKeywords.has(nodes[0].value.toLowerCase())) {
		return [nodes[0]];
	}

	let shouldBeIgnored = false;

	valueNodes.walk((valueNode) => {
		if (shouldBeIgnored) return;

		if (valueNode.type === 'function') {
			return false;
		}

		if (valueNode.type !== 'word') {
			return;
		}

		const valueLowerCase = valueNode.value.toLowerCase();

		// Ignore non-standard syntax
		if (!isStandardSyntaxValue(valueLowerCase)) {
			// Cannot find animation name if shorthand has non-standard syntax value (#5532)
			shouldBeIgnored = true;
			animationNames.length = 0; // clears animationNames

			return;
		}

		// Ignore variables
		if (isVariable(valueLowerCase)) {
			return;
		}

		// Ignore keywords for other animation parts
		if (keywords.animationShorthandKeywords.has(valueLowerCase)) {
			return;
		}

		// Ignore numbers with units
		const { unit } = getDimension(valueNode);

		if (unit || unit === '') {
			return;
		}

		animationNames.push(valueNode);
	});

	return animationNames;
}

module.exports = findAnimationName;
