"use strict";

const _ = require("lodash");
const functionArgumentsSearch = require("../../utils/functionArgumentsSearch");
const isStandardSyntaxUrl = require("../../utils/isStandardSyntaxUrl");
const report = require("../../utils/report");
const ruleMessages = require("../../utils/ruleMessages");
const validateOptions = require("../../utils/validateOptions");

const ruleName = "function-url-no-scheme-relative";

const messages = ruleMessages(ruleName, {
  rejected: "Unexpected scheme-relative url"
});

const rule = function(actual) {
  return (root, result) => {
    const validOptions = validateOptions(result, ruleName, { actual });
    if (!validOptions) {
      return;
    }

    root.walkDecls(function(decl) {
      functionArgumentsSearch(
        decl.toString().toLowerCase(),
        "url",
        (args, index) => {
          const url = _.trim(args, " '\"");

          if (!isStandardSyntaxUrl(url) || url.indexOf("//") !== 0) {
            return;
          }

          report({
            message: messages.rejected,
            node: decl,
            index,
            result,
            ruleName
          });
        }
      );
    });
  };
};

rule.ruleName = ruleName;
rule.messages = messages;
module.exports = rule;
