/**
 * webpack config
 */

import * as webpack from 'webpack';
const StringReplacePlugin = require('string-replace-webpack-plugin');
const constants = require('./src/const.json');

const env = process.env.NODE_ENV;
const isProduction = env === 'production';

const pack: webpack.Configuration = {
	entry: {
		'desktop': './src/web/app/desktop/script.js',
		'mobile': './src/web/app/mobile/script.js',
		'dev': './src/web/app/dev/script.js',
		'auth': './src/web/app/auth/script.js'
	},
	module: {
		rules: [
			{
				enforce: 'pre',
				test: /\.tag$/,
				exclude: /node_modules/,
				loader: StringReplacePlugin.replace({
					replacements: [
						{ pattern: /\$theme\-color\-foreground/g, replacement: () => constants.themeColorForeground },
						{ pattern: /\$theme\-color/g, replacement: () => constants.themeColor },
					]
				})
			},
			{
				test: /\.tag$/,
				exclude: /node_modules/,
				loader: 'riot-tag-loader',
				query: {
					hot: false,
					style: 'stylus',
					expr: false,
					compact: true,
					parserOptions: {
						style: {
							compress: true
						}
					}
				}
			},
			{
				test: /\.styl$/,
				exclude: /node_modules/,
				use: [
					{ loader: 'style-loader' },
					{ loader: 'css-loader' },
					{ loader: 'stylus-loader' }
				]
			}
		]
	},
	plugins: [
		new webpack.DefinePlugin({
			CONFIG: {
				themeColor: JSON.stringify(constants.themeColor)
			}
		}),
		new StringReplacePlugin()
	],
	output: {
		filename: '[name]/script.js'
	}
};

if (isProduction) {
	pack.plugins.push(new webpack.optimize.UglifyJsPlugin());
}

module.exports = pack;
