import postcss from 'postcss';
import postcssPresetEnv from 'postcss-preset-env';
import postcssPkg from 'postcss/package.json';
import semver from 'semver';

const incomingVersion = semver.inc(postcssPkg.version, 'minor');

export default function astLoader(content) {
  const callback = this.async();

  const { spy = jest.fn() } = this.query;

  postcss([postcssPresetEnv({ stage: 0 })])
    .process(content, {
      // eslint-disable-next-line no-undefined
      from: undefined,
    })
    .then(({ css, map, root, messages }) => {
      const ast = {
        type: 'postcss',
        version: incomingVersion,
      };

      Object.defineProperty(ast, 'root', {
        get: spy.mockReturnValue(root),
      });

      callback(null, css, map, { ast, messages });
    });
}
