const webpack = require('webpack');
const HTMLWebpackPlugin = require('html-webpack-plugin');
const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const UglifyJsWebpackPlugin = require('uglifyjs-webpack-plugin');
const baseConfig = require('./webpack.config');
const env = require('../src/config/env');
const _ = require('lodash');
const merge = require('webpack-merge');
import getPackageVersion from './getPackageVersion';

const prodConf = {
  mode: 'production',

  entry: {
    main: ['babel-polyfill', 'whatwg-fetch', `${env.SRC_ROOT}/webui/src/index.js`],
  },

  module: {
    rules: [],
  },

  plugins: [
    new webpack.DefinePlugin({
      __DEBUG__: false,
      'process.env.NODE_ENV': '"production"',
      __APP_VERSION__: `"${getPackageVersion()}"`,
    }),
    new MiniCssExtractPlugin({
      filename: 'style.[contenthash].css',
    }),
    new HTMLWebpackPlugin({
      title: 'ToReplaceByTitle',
      filename: 'index.html',
      verdaccioURL: 'ToReplaceByVerdaccio',
      template: `${env.SRC_ROOT}/webui/template/index.html`,
      debug: false,
      inject: true,
    }),
  ],

  optimization: {
    minimizer: [
      new UglifyJsWebpackPlugin({
        sourceMap: true,
      }),
    ],
  },
};

prodConf.module.rules = baseConfig.module.rules
  .filter((loader) =>
    Array.isArray(loader.use) && loader.use.find((v) => /css/.test(v.loader.split('-')[0]))
  ).forEach((loader) => {
    loader.use = [MiniCssExtractPlugin.loader].concat(_.tail(loader.use));
});

module.exports = merge(baseConfig, prodConf);
