// Entry Point -> Output
const webpack = require("webpack")
const CompressionPlugin = require("compression-webpack-plugin");


const MiniCssExtractPlugin = require('mini-css-extract-plugin');
const path = require("path");

//console.log("node env", process.env.NODE_ENV);

//process.env.NODE_ENV = process.env.NODE_ENV || "development"

//console.log("node env", process.env.NODE_ENV);

module.exports = (env) => {

    //console.log("env docker", process.env.DOCKER);

    if (env === "test") {

        console.log("Loading test env variables")
        require("dotenv").config({path: ".env.test"})

    } else if (env === "development") {

        console.log("Loading development env variables")
        require("dotenv").config({path: ".env.development"})

    } else {

        console.log("Loading production env variables")
        require("dotenv").config({path: ".env.production"});
        require("dotenv").config({path: "docker-variables.env"});
    }

    console.log("env", env);
    const isProduction = env === "production"
    console.log("is prod", isProduction);
    
    const CSSExtract = new MiniCssExtractPlugin({ filename: 'styles.css' });
    return {

        entry:'./src/app.js',
        output: {
            path: path.join(__dirname, "public", "dist"),
            filename: "bundle.js"
        },
        module: {
            rules: [{
                loader: "babel-loader",
                test: /\.js$/,
                exclude: /node_modules/
            }, {
                test: /\.s?css$/,
                use: [
					{
						loader: MiniCssExtractPlugin.loader
					},
					{
						loader: 'css-loader',
						options: {
							sourceMap: true
						}
					},
					{
						loader: 'sass-loader',
						options: {
                            implementation: require("dart-sass") ,
							sourceMap: true
						}
					}
				]
            }]
        },
        plugins: [
            CSSExtract,
            new webpack.DefinePlugin({
                "process.env.PORT": JSON.stringify(process.env.PORT),
                "process.env.REMOTE_URL": JSON.stringify(process.env.REMOTE_URL),
                "process.env.ENABLE_VIDEO_TRANSCODING": JSON.stringify(process.env.ENABLE_VIDEO_TRANSCODING),
                "process.env.DISABLE_STORAGE": JSON.stringify(process.env.DISABLE_STORAGE)
            }),
            new CompressionPlugin()
        ],
        devtool: isProduction ? "source-map" : "inline-source-map",
        devServer: {
            contentBase: path.join(__dirname, "public"),
            historyApiFallback: true,
            publicPath: "/dist/"
        },

    }
}

