// Copyright 2020 Thomas Hintz
//
// This file is part of the Alpha Centauri Farming project.
//
// The Alpha Centauri Farming project is free software: you can
// redistribute it and/or modify it under the terms of the GNU General
// Public License as published by the Free Software Foundation, either
// version 3 of the License, or (at your option) any later version.
//
// The Alpha Centauri Farming project is distributed in the hope that
// it will be useful, but WITHOUT ANY WARRANTY; without even the
// implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
// PURPOSE.  See the GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with the Alpha Centauri Farming project.  If not, see
// <https://www.gnu.org/licenses/>.

const merge = require('webpack-merge');
const common = require('./webpack.common.js');
const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const ReactRefreshWebpackPlugin = require('@pmmmwh/react-refresh-webpack-plugin');
const webpack = require('webpack');

module.exports = function(env) {
    return merge(common, {
        mode: 'development',
        devtool: 'inline-source-map',
        devServer: {
            port: 9000,
            contentBase: './dist',
            hot: true,
            proxy: {
                '/websocket': {
                    target: 'ws://localhost:8080',
                    ws: true
                },
            },
        },
        resolve: {
            modules: [path.resolve(__dirname, 'src'),
                      path.resolve(__dirname, env.assets),
                      'node_modules']
        },
        plugins: [
            new webpack.HotModuleReplacementPlugin(),
            new ReactRefreshWebpackPlugin(),
            new HtmlWebpackPlugin({
                title: 'Alpha Centauri Farming',
                filename: 'index.html',
                meta: {viewport: 'width=device-width, initial-scale=1'},
            }),
        ],
        module: {
            rules: [
                {
                    test: /\.jsx?$/,
                    exclude: /node_modules/,
                    use: [
                        {
                            loader: require.resolve('babel-loader'),
                            options: {
                                plugins: [require.resolve('react-refresh/babel')],
                            },
                        },
                    ],
                },
            ],
        },
    });
}
