const webpack = require('webpack');
const WebpackShellPlugin = require('webpack-shell-plugin');
const CaseSensitivePathsPlugin = require('case-sensitive-paths-webpack-plugin');
const ManifestPlugin = require('webpack-manifest-plugin');
const WatchMissingNodeModulesPlugin = require('react-dev-utils/WatchMissingNodeModulesPlugin'); // eslint-disable-line max-len
const path = require('path');

const pkg = require('../package.json');
const paths = require('./paths');

const {
  FRONTEND
} = paths;

module.exports = {
  'manifest': () => new ManifestPlugin({
    fileName: 'asset-manifest.json'
  }),
  'watch-missing-node-modules': () => new WatchMissingNodeModulesPlugin(
    path.join(FRONTEND, 'node_modules')
  ),
  'case-sensitive-paths': () => new CaseSensitivePathsPlugin(),
  'no-errors': () => new webpack.NoEmitOnErrorsPlugin(),
  'occurrence-order': () => new webpack.optimize.OccurrenceOrderPlugin(true),
  'aggressive-merging': () => new webpack.optimize.AggressiveMergingPlugin(),
  'hot-module-replacement': () => new webpack.HotModuleReplacementPlugin(),
  'named-modules': () => new webpack.NamedModulesPlugin(),
  'define': () => new webpack.DefinePlugin({
    'process.env': {
      BASELINE_GRID: JSON.stringify(process.env.BASELINE_GRID),
      NODE_ENV: JSON.stringify(process.env.NODE_ENV || 'development'),
      APP_NAME: JSON.stringify(pkg.name),
      APP_VERSION: JSON.stringify(pkg.version)
    }
  }),
  'shell': () => new WebpackShellPlugin({
    onBuildStart: ['npm run build-locales']
  }),
  'uglify-js': () => new webpack.optimize.UglifyJsPlugin({
    sourceMap: true,
    compress: {
      screw_ie8: true,
      warnings: false
    },
    mangle: {
      screw_ie8: true
    },
    output: {
      comments: false,
      indent_level: 2,
      screw_ie8: true
    }
  })
};
