import * as path from 'path';
import { CleanWebpackPlugin } from 'clean-webpack-plugin';
import * as CopyWebpackPlugin from 'copy-webpack-plugin';
import * as UglifyJsPlugin from 'uglifyjs-webpack-plugin';
import * as webpack from 'webpack';
import * as nodeExternals from 'webpack-node-externals';
import { getEnviroments } from './enviroment';

const enviroments = getEnviroments();

export const externals = [nodeExternals()];
// if (enviroments.__DEV__) {
//   externals.push('devtron');
// }

const outputDir = 'dist/ucap-webmessenger-electron';

const mainConfig: webpack.Configuration = {
  entry: {
    main: path.resolve(
      __dirname,
      '..',
      'electron-projects/ucap-webmessenger-electron/src/index'
    )
  },
  target: 'electron-main',
  mode: enviroments.__DEV__ ? 'development' : 'production',
  devtool: enviroments.__DEV__ ? 'source-map' : undefined,
  optimization: {
    noEmitOnErrors: true,
    minimizer: [new UglifyJsPlugin()]
  },
  externals,
  output: {
    filename: '[name].js',
    path: path.resolve(__dirname, '..', outputDir)
  },
  module: {
    rules: [
      {
        test: /\.tsx?$/,
        include: [
          path.resolve(
            __dirname,
            '..',
            'electron-projects/ucap-webmessenger-electron/src'
          ),
          path.resolve(__dirname, '..', 'electron-projects'),
          path.resolve(__dirname, '..', 'projects')
        ],
        use: [
          {
            loader: 'awesome-typescript-loader',
            options: {
              useCache: true,
              configFileName: path.resolve(
                __dirname,
                '..',
                'electron-projects/ucap-webmessenger-electron/tsconfig.electron.json'
              )
            }
          }
        ],
        exclude: /node_modules/
      },
      {
        test: /\.node$/,
        loader: 'awesome-node-loader',
        options: {
          name: '[name].[ext]'
        }
      }
    ]
  },
  plugins: [
    new CleanWebpackPlugin({ verbose: false }),
    // This saves us a bunch of bytes by pruning locales (which we don't use)
    // from moment.
    new webpack.IgnorePlugin(/^\.\/locale$/, /moment$/),
    new webpack.DefinePlugin(
      Object.assign({}, enviroments, {
        __PROCESS_KIND__: JSON.stringify('main')
      })
    ),
    new CopyWebpackPlugin([
      {
        from: 'ucap-webmessenger-electron/assets/**/*',
        to: path.resolve(__dirname, '..', 'dist'),
        context: 'electron-projects'
      }
    ])
  ],
  resolve: {
    extensions: ['.js', '.ts'],
    alias: {
      '@ucap-webmessenger/electron-core': path.resolve(
        __dirname,
        '..',
        'electron-projects/ucap-webmessenger-electron-core/src/public-api'
      ),
      '@ucap-webmessenger/electron-notification': path.resolve(
        __dirname,
        '..',
        'electron-projects/ucap-webmessenger-electron-notification/src/public-api'
      ),
      '@ucap-webmessenger/electron-update-window': path.resolve(
        __dirname,
        '..',
        'electron-projects/ucap-webmessenger-electron-update-window/src/public-api'
      ),
      '@ucap-webmessenger/core': path.resolve(
        __dirname,
        '..',
        'projects/ucap-webmessenger-core/src/public-api'
      ),
      '@ucap-webmessenger/native': path.resolve(
        __dirname,
        '..',
        'projects/ucap-webmessenger-native/src/public-api'
      ),
      '@ucap-webmessenger/native-electron': path.resolve(
        __dirname,
        '..',
        'projects/ucap-webmessenger-native-electron/src/public-api'
      ),
      '@ucap-webmessenger/electron': path.resolve(
        __dirname,
        '..',
        'electron-projects/ucap-webmessenger-electron/src/public-api'
      )
    },
    modules: [path.resolve(__dirname, '..', 'node_modules/')]
  },
  node: {
    __dirname: false,
    __filename: false
  }
};

export default [mainConfig];