const path = require("path");
const WebpackShellPluginNext = require("webpack-shell-plugin-next");

let getJsConfig = (minimize) => {
  return {
    entry: ["./tool/dropzone.dist.js"],
    mode: "production",
    module: {
      rules: [
        {
          test: /\.js$/,
          exclude: [
            /(node_modules|bower_components)/,
            /\bcore-js\b/,
            /\bwebpack\/buildin\b/,
          ],
          use: {
            loader: "babel-loader",
            options: {
              babelrc: false,
              configFile: path.resolve(__dirname, "babel.config.js"),
              compact: false,
              cacheDirectory: true,
              sourceMaps: false,
            },
          },
        },
        {
          // Load .html files as string
          test: /\.html$/i,
          loader: "html-loader",
          options: {
            sources: false,
          },
        },
      ],
    },
    optimization: {
      minimize: minimize,
    },
    output: {
      libraryTarget: "umd",
      path: path.resolve(__dirname, minimize ? "dist/min" : "dist"),
      filename: minimize ? "dropzone.min.js" : "dropzone.js",
    },
  };
};

let getCssConfig = (minimize) => {
  return {
    entry: ["./src/dropzone.scss", "./src/basic.scss"],
    mode: "production",
    module: {
      rules: [
        {
          test: /\.scss$/,
          use: [
            {
              loader: "file-loader",
              options: {
                name: minimize ? "[name].min.css" : "[name].css",
              },
            },
            {
              loader: "extract-loader",
            },
            {
              loader: "css-loader",
            },
            {
              loader: "sass-loader",
              options: {
                sassOptions: {
                  outputStyle: minimize ? "compressed" : "expanded",
                },
              },
            },
          ],
        },
      ],
    },
    optimization: {
      minimize: false,
    },
    output: {
      path: path.resolve(__dirname, minimize ? "dist/min" : "dist"),
      filename: "delete-me",
    },
    plugins: [
      new WebpackShellPluginNext({
        onBuildEnd: {
          scripts: ["npx shx rm -f dist/delete-me && npx shx rm -f dist/min/delete-me"],
        },
      }),
    ],
  };
};

module.exports = [
  getJsConfig(false),
  getJsConfig(true),
  getCssConfig(false),
  getCssConfig(true),
];