const webpack = require('webpack')
const merge = require('webpack-merge')
const path = require('path')

const CleanWebpackPlugin = require('clean-webpack-plugin')
const UglifyJSPlugin = require('uglifyjs-webpack-plugin')
const ExtractTextPlugin = require('extract-text-webpack-plugin')
const OfflinePlugin = require('offline-plugin')
const DuplicatePackageCheckerPlugin = require('duplicate-package-checker-webpack-plugin')
const SimpleProgressWebpackPlugin = require('simple-progress-webpack-plugin')

const common = require('./webpack.common.js')

module.exports = merge(common, {
  module: {
    rules: []
  },
  plugins: [
    new SimpleProgressWebpackPlugin({
      format: 'expanded'
    }),
    new CleanWebpackPlugin([
      'assets/js/*.*',
      'assets/css/*.*',
      'assets/*.js',
      'assets/*.json'
    ], {
      root: process.cwd(),
      verbose: false
    }),
    new UglifyJSPlugin({
      cache: path.join(process.cwd(), '.webpack-cache/uglify'),
      parallel: true
    }),
    new webpack.DefinePlugin({
      'process.env.NODE_ENV': JSON.stringify('production')
    }),
    new ExtractTextPlugin('css/bundle.css'),
    new OfflinePlugin({
      publicPath: '/',
      externals: ['/'],
      caches: {
        main: [
          'js/runtime.js',
          'js/vendor.js',
          'js/client.js'
        ],
        additional: [
          ':externals:'
        ],
        optional: [
          'js/*.chunk.js'
        ]
      },
      safeToUseOptionalCaches: true
    }),
    new DuplicatePackageCheckerPlugin(),
    // Disable Extract Text Plugin stats:
    {
      apply(compiler) {
        compiler.plugin('done', stats => {
          if (Array.isArray(stats.compilation.children)) {
            stats.compilation.children = stats.compilation.children.filter(child => {
              return child.name.indexOf('extract-text-webpack-plugin') !== 0
            })
          }
        })
      }
    }
  ]
})