"use strict"

const declarationValueIndex = require("../utils/declarationValueIndex")
const report = require("../utils/report")
const styleSearch = require("style-search")

module.exports = function (opts) {
  opts.root.walkDecls(function (decl) {
    const indexOffset = declarationValueIndex(decl)
    const declString = decl.toString()
    const valueString = decl.toString().slice(indexOffset)
    if (valueString.indexOf("!") == -1) {
      return
    }

    styleSearch({ source: valueString, target: "!" }, match => {
      check(declString, match.startIndex + indexOffset, decl)
    })
  })

  function check(source, index, node) {
    opts.locationChecker({ source, index, err: m => report({
      message: m,
      node,
      index,
      result: opts.result,
      ruleName: opts.checkedRuleName,
    }),
    })
  }
}
