var path = require('path');
var HtmlWebpackPlugin = require('html-webpack-plugin');
var UpdateVersionPlugin = require('./updateVersionPlugin');
//var ChangeScriptSourcePlugin = require('./changeScriptSourcePlugin');
var CopyPlugin = require('copy-webpack-plugin');
var CleanWebpackPlugin = require('clean-webpack-plugin');

module.exports = {
    entry: path.resolve(__dirname, 'js/main.js'),
    output: {
        path: path.resolve(__dirname, 'build',"js"),
        filename: '[name].[contenthash].js',
        library: 'ivprogCore',
        libraryTarget: 'umd'
    },
    node: {
        fs: 'empty',
    },
    module: {
        rules: [
            {
              test: /\.js$/,
              exclude: /(node_modules)/,
              use: {
                loader: "babel-loader",
                options: {
                  presets: ["@babel/preset-env"]
                }
              }
            },
            {
              test: /\.g4$/,
              exclude: /(node_modules)/,
              use: {
                loader:'antlr4-webpack-loader'
              }
            },
            {
              test: /\.tsx?$/,
              use: 'ts-loader',
              exclude: /node_modules/
            }
        ]
    },
    resolve: {
      extensions: [ '.tsx', '.ts', '.js' ]
    },
    stats: {
        colors: true
    },
    plugins: [
      new CleanWebpackPlugin({
        cleanOnceBeforeBuildPatterns:[path.resolve(__dirname, 'build/**/*')],
        watch: true
      }),
      new UpdateVersionPlugin(),
      new HtmlWebpackPlugin({
        template: 'templates/index.html',
        filename: path.resolve(__dirname, 'build', 'index.html')
      }),
      new HtmlWebpackPlugin({
        template: 'templates/runner.html',
        filename: path.resolve(__dirname, 'build', 'runner.html')
      }),
      /*new ChangeScriptSourcePlugin(),*/
      new CopyPlugin([
        {from:'js/iassign-integration-functions.js', to:path.resolve(__dirname, 'build/js')},
        {from:"css/ivprog-visual-1.0.css", to:path.resolve(__dirname, 'build/css')},
        {from:"css/ivprog-term.css", to:path.resolve(__dirname, 'build/css')},
        {from:"css/ivprog-assessment.css", to:path.resolve(__dirname, 'build/css')},
        {from:"css/ivprog-editor.css", to:path.resolve(__dirname, 'build/css')},
        {from:"css/roboto.css", to:path.resolve(__dirname, 'build/css')},
        {from:"css/fonts/", to:path.resolve(__dirname, 'build/css/fonts')},
        {from:'js/Sortable.js', to:path.resolve(__dirname, 'build/js')},
        {from: 'img/trash-icon.png', to:path.resolve(__dirname, 'build/img')},
        {from: 'img/empty.svg', to:path.resolve(__dirname, 'build/img')},
        {from:'js/jquery.json-editor.min.js', to:path.resolve(__dirname, 'build/js')},
        {from:'node_modules/codemirror/lib/codemirror.css', to:path.resolve(__dirname, 'build/css')},
        {from:'node_modules/codemirror/addon/hint/show-hint.css', to:path.resolve(__dirname, 'build/css')},
        {from:'node_modules/codemirror/theme/ttcn.css', to:path.resolve(__dirname, 'build/css')},
        /*{from:'index.html', to:path.resolve(__dirname, 'build')},
        {from:'runner.html', to:path.resolve(__dirname, 'build')},*/
      ])
    ],
    optimization: {
        splitChunks: {
            chunks: 'all'
        }
    },
    devtool: 'source-map',
    watchOptions: {
        ignored: [
          path.resolve(__dirname, '.ima_version.json'),
        ]
    }
};