"use strict";

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.default = _default;

var _lodash = _interopRequireDefault(require("lodash"));

var _postcss = _interopRequireDefault(require("postcss"));

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

function updateSource(nodes, source) {
  return _lodash.default.tap(Array.isArray(nodes) ? _postcss.default.root({
    nodes
  }) : nodes, tree => {
    tree.walk(node => node.source = source);
  });
}

function _default(_config, {
  base: pluginBase,
  components: pluginComponents,
  utilities: pluginUtilities
}) {
  return function (css) {
    css.walkAtRules('import', atRule => {
      if (atRule.params === '"tailwindcss/base"' || atRule.params === "'tailwindcss/base'") {
        atRule.name = 'tailwind';
        atRule.params = 'base';
      }

      if (atRule.params === '"tailwindcss/components"' || atRule.params === "'tailwindcss/components'") {
        atRule.name = 'tailwind';
        atRule.params = 'components';
      }

      if (atRule.params === '"tailwindcss/utilities"' || atRule.params === "'tailwindcss/utilities'") {
        atRule.name = 'tailwind';
        atRule.params = 'utilities';
      }

      if (atRule.params === '"tailwindcss/screens"' || atRule.params === "'tailwindcss/screens'") {
        atRule.name = 'tailwind';
        atRule.params = 'screens';
      }
    });
    let includesScreensExplicitly = false;
    css.walkAtRules('tailwind', atRule => {
      if (atRule.params === 'preflight') {
        // prettier-ignore
        throw atRule.error("`@tailwind preflight` is not a valid at-rule in Tailwind v1.0, use `@tailwind base` instead.", {
          word: 'preflight'
        });
      }

      if (atRule.params === 'base') {
        atRule.before(updateSource(pluginBase, atRule.source));
        atRule.remove();
      }

      if (atRule.params === 'components') {
        atRule.before(_postcss.default.comment({
          text: 'tailwind start components'
        }));
        atRule.before(updateSource(pluginComponents, atRule.source));
        atRule.after(_postcss.default.comment({
          text: 'tailwind end components'
        }));
        atRule.remove();
      }

      if (atRule.params === 'utilities') {
        atRule.before(_postcss.default.comment({
          text: 'tailwind start utilities'
        }));
        atRule.before(updateSource(pluginUtilities, atRule.source));
        atRule.after(_postcss.default.comment({
          text: 'tailwind end utilities'
        }));
        atRule.remove();
      }

      if (atRule.params === 'screens') {
        includesScreensExplicitly = true;
        atRule.before(_postcss.default.comment({
          text: 'tailwind start screens'
        }));
        atRule.after(_postcss.default.comment({
          text: 'tailwind end screens'
        }));
      }
    });

    if (!includesScreensExplicitly) {
      css.append([_postcss.default.comment({
        text: 'tailwind start screens'
      }), _postcss.default.atRule({
        name: 'tailwind',
        params: 'screens'
      }), _postcss.default.comment({
        text: 'tailwind end screens'
      })]);
    }
  };
}