// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

const path = require('path');
const webpack = require('webpack');
const BundleAnalyzerPlugin =
  require('webpack-bundle-analyzer').BundleAnalyzerPlugin;
const HtmlWebpackPlugin = require('html-webpack-plugin');
const CircularDependencyPlugin = require('circular-dependency-plugin');

const config = {
  entry: {
    'mr-app': './static_src/elements/mr-app/mr-app.js',
    'mr-profile-page':
      './static_src/elements/chdir/mr-profile-page/mr-profile-page.js',
    'ezt-element-package': './static_src/elements/ezt/ezt-element-package.js',
    'ezt-footer-scripts-package':
      './static_src/elements/ezt/ezt-footer-scripts-package.js',
  },
  devtool: 'eval-source-map',
  plugins: [
    new CircularDependencyPlugin({
      // exclude detection of files based on a RegExp
      exclude: /a\.js|node_modules/,
      // add errors to webpack instead of warnings
      failOnError: true,
      // set the current working directory for displaying module paths
      cwd: process.cwd(),
    }),
    new HtmlWebpackPlugin({
      chunks: ['mr-app'],
      inject: false,
      template: 'static_src/webpacked-scripts-template.html',
      filename: '../../templates/webpack-out/mr-app.ezt',
    }),
    new HtmlWebpackPlugin({
      chunks: ['mr-profile-page'],
      inject: false,
      template: 'static_src/webpacked-scripts-template.html',
      filename: '../../templates/webpack-out/mr-profile-page.ezt',
    }),
    new HtmlWebpackPlugin({
      chunks: ['ezt-element-package'],
      inject: false,
      template: 'static_src/webpacked-scripts-template.html',
      filename: '../../templates/webpack-out/ezt-element-package.ezt',
    }),
    new HtmlWebpackPlugin({
      chunks: ['ezt-footer-scripts-package'],
      inject: false,
      template: 'static_src/webpacked-scripts-template.html',
      filename: '../../templates/webpack-out/ezt-footer-scripts-package.ezt',
    }),
  ],
  module: {
    rules: [
      {
        test: /\.(ts|tsx)$/,
        exclude: /node_modules/,
        use: ['babel-loader'],
      },
      {
        test: /\.css$/i,
        use: [
          {loader: 'style-loader', options: {injectType: 'styleTag'}},
          {
            loader: 'css-loader',
            options: {
              modules: true,
              importLoaders: 1,
            },
          },
          'postcss-loader',
        ],
      },
    ],
  },
  resolve: {
    extensions: ['.js', '.ts', '.tsx'],
    modules: ['node_modules', 'static_src'],
  },
  output: {
    filename: '[name].[contenthash].min.js',
    path: path.resolve(__dirname, 'static/dist'),
    // __webpack_public_path__ is used to dynamically set the public path to
    // the App Engine version URL.
    publicPath: '/static/dist/',
  },
  externals: {
    moment: 'moment',
  },
};

module.exports = (env, argv) => {
  if (argv.mode === 'production') {
    // Settings for deploying JS to production.
    config.devtool = 'source-map';

    config.plugins = config.plugins.concat([
      new webpack.DefinePlugin(
          {'process.env.NODE_ENV': '"production"'},
      ),
    ]);
  }

  if (argv.analyze) {
    config.plugins.push(new BundleAnalyzerPlugin());
  }
  return config;
};
