/* @flow */
"use strict"

const isStandardSyntaxValue = require("./isStandardSyntaxValue")
const isVariable = require("./isVariable")
const keywordSets = require("../reference/keywordSets")
const postcssValueParser = require("postcss-value-parser")

/**
 * Get the list-style-type within a `list-style` shorthand property value.
 */
module.exports = function findListStyleType(value/*: string*/)/*: Array<Object>*/ {
  const listStyleTypes = []

  const valueNodes = postcssValueParser(value)

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

  valueNodes.walk(valueNode => {
    if (valueNode.type === "function") {
      return false
    }
    if (valueNode.type !== "word") {
      return
    }

    const valueLowerCase = valueNode.value.toLowerCase()

    // Ignore non standard syntax
    if (!isStandardSyntaxValue(valueLowerCase)) {
      return
    }
    // Ignore variables
    if (isVariable(valueLowerCase)) {
      return
    }
    // Ignore keywords for other font parts
    if (keywordSets.listStylePositionKeywords.has(valueLowerCase) || keywordSets.listStyleImageKeywords.has(valueLowerCase)) {
      return
    }

    listStyleTypes.push(valueNode)
  })

  return listStyleTypes
}
