Source: engine/universal/capabilities/parser/listParser/itemExists.js

const _ = require('lodash');
const createExpandedList = require('../listParser/listParser');
const potentialActionParser = require('../potentialActionParser');

/**
 * @module itemsExists
 * @memberof module:@proceed/capabilities.module:parser.module:listParser
 */

/**
 *
 * A Function that gets a capability list and converts the capability list into
 * its expanded list and returns an array of the potential actions
 * @param {list} capabilityList
 * @returns {array} potential actions of the given capability list
 */
async function getPotentialActionsFromList(capabilityList) {
  const expandedList = await Promise.all(createExpandedList(capabilityList));
  const flattenedList = _.flatten(expandedList.map((capItem) => capItem.expanded));
  return potentialActionParser.getPotentialActions(flattenedList);
}

/**
 * @function
 * A Function that gets a capability list and a capability item
 * and checks if the item is included in the capability list
 * @param {list} capabilityList
 * @param {object} capabilityItem
 * @returns {boolean}
 */
module.exports = async (capabilityItem, capabilityList) => {
  const potentialActions = await Promise.resolve(getPotentialActionsFromList(capabilityList));
  const potentialAction = await Promise.resolve(getPotentialActionsFromList([capabilityItem]));
  if (potentialActions.includes(potentialAction)) {
    return true;
  }
  return false;
};