var webpack = require('webpack');
var path = require('path');

var PATHS = {
    SRC: path.resolve(__dirname, 'src/main/webapp'),
    TARGET: path.resolve(__dirname, 'dist')
};

module.exports = (env, argv) => {
    let devmode = argv.mode && argv.mode === 'development';
    let entry = [];
    if (devmode) {
        entry.push(path.resolve(PATHS.SRC, 'lib/main.jsx'));
    } else {
        entry.push(
            path.resolve(PATHS.SRC, 'lib/ecomp/asdc/sequencer/Sequencer.jsx')
        );
    }

    let config = {
        entry: entry,
        performance: { hints: false },
        output: {
            path: PATHS.TARGET,
            filename: 'index.js',
            libraryTarget: 'umd'
        },
        resolve: {
            extensions: ['.js', '.jsx']
        },
        devtool: 'eval-source-map',
        module: {
            rules: [
                {
                    test: /\.(js|jsx)$/,
                    loader: 'eslint-loader',
                    include: [/src/],
                    enforce: 'pre'
                },
                {
                    test: /\.(js|jsx)$/,
                    loader: 'babel-loader',
                    include: path.join(PATHS.SRC, 'lib')
                },
                {
                    test: /\.(css)$/,
                    use: [{ loader: 'style-loader' }, { loader: 'css-loader' }]
                },
                {
                    test: /\.(png|woff|woff2|eot|ttf|otf)$/,
                    loader: 'url-loader?limit=100000'
                },
                {
                    test: /\.scss$/,
                    include: path.join(PATHS.SRC, 'res'),
                    loaders: ['style-loader', 'css-loader', 'sass-loader']
                },
                {
                    test: /\.html$/,
                    include: path.join(PATHS.SRC, 'lib'),
                    loaders: ['raw-loader']
                },
                {
                    test: /\.svg$/,
                    loader: 'svg-sprite-loader',
                    options: {
                        symbolId: '[name]_[hash]',
                        extract: false
                    }
                }
            ]
        },
        externals: devmode
            ? {}
            : {
                  'd3-zoom': 'd3-zoom',
                  'd3-selection': 'd3-selection',
                  'lodash/merge': 'lodash/merge',
                  'lodash/template': 'lodash/template',
                  react: 'react',
                  'react-dnd': 'react-dnd',
                  'react-dnd-html5-backend': 'react-dnd-html5-backend',
                  'react-dom': 'react-dom',
                  'react-redux': 'react-redux',
                  'react-select': 'react-select',
                  redux: 'redux',
                  'prop-types': 'prop-types'
              },
        devServer: {
            port: 4096,
            quiet: false,
            contentBase: 'src/main/webapp',
            proxy: {
                '/services/*': {
                    target: 'http://localhost:38080/asdc-sequencer',
                    secure: false
                }
            }
        },
        plugins: devmode
            ? [
                  new webpack.DefinePlugin({
                      DEBUG: devmode === true,
                      DEV: devmode === true
                  }),
                  new webpack.HotModuleReplacementPlugin(),
                  new webpack.LoaderOptionsPlugin({
                      options: {
                          eslint: {
                              failOnWarning: false,
                              failOnError: false,
                              configFile: 'eslintrc.json'
                          },
                          context: '/'
                      }
                  })
              ]
            : [
                  new webpack.DefinePlugin({
                      DEBUG: devmode === true,
                      DEV: devmode === true
                  }),
                  new webpack.LoaderOptionsPlugin({
                      options: {
                          eslint: {
                              failOnWarning: false,
                              failOnError: false,
                              configFile: 'eslintrc.json'
                          },
                          context: '/'
                      }
                  })
              ]
    };

    return config;
};