const fs = require("fs");
const postcss = require("postcss");
const postcssImportExtGlob = require("postcss-import-ext-glob");
const postcssImport = require("postcss-import");
const postcssPresetEnv = require("postcss-preset-env");
const cssnano = require("cssnano");
const esbuild = require("esbuild");
const automaticNoopener = require("eleventy-plugin-automatic-noopener");

module.exports = function(eleventyConfig) {
  eleventyConfig.on("eleventy.before", async () => {
    const cssSrc = "./src/style/style.css";
    const cssDest = "./dist/style.css";

    fs.readFile(cssSrc, (err, css) => {
      // noinspection JSCheckFunctionSignatures
      postcss([
        postcssImportExtGlob,
        postcssImport,
        postcssPresetEnv,
        cssnano
      ])
        .process(css, { from: cssSrc, to: cssDest })
        .then(res => {
          fs.writeFile(cssDest, res.css, () => true);
        });
    });

    await esbuild.build({
      entryPoints: ["src/js/main.js"],
      bundle: true,
      minify: true,
      target: "es2020",
      outfile: "dist/main.js"
    })
      .then(() => console.log("🧳 esbuild done"))
      .catch(() => process.exit(1));
  });

  eleventyConfig.addWatchTarget("./src/style/");
  eleventyConfig.addWatchTarget("./src/js/");

  eleventyConfig.addPlugin(automaticNoopener, {
    noreferrer: true
  });

  eleventyConfig.addPassthroughCopy("./src/img/");

  return { dir: { input: "src", output: "dist" } };
};