'use strict';
const path = require('path');
const CopyWebpackPlugin = require('copy-webpack-plugin');
const ExtractTextPlugin = require("extract-text-webpack-plugin");

const ENV = process.env.npm_lifecycle_event;
console.log();

const isTestBuild = ENV === 'test';
const isDevBuild = ENV === 'dev-build';
const isProdBuild = ENV === 'build';

const config = {
  module: {
    preLoaders: [],
    loaders: [{
      test: /\.js$/,
      loader: 'babel',
      exclude: /node_modules/
    }]
  }
};

if (isTestBuild) {
  config.devtool = 'inline-source-map';
  config.entry = {};
  config.output = {};

  // code coverage config
  config.module.preLoaders.push({
    test: /\.js$/,
    exclude: [
      /node_modules/,
      /\.spec\.js$/
    ],
    loader: 'isparta'
  });
}

if (isDevBuild || isProdBuild) {

  config.devtool = isDevBuild ? 'eval-source-map' : 'source-map';
  config.entry = ['./src/app.js'];

  config.output = {
    path: path.join(__dirname, '/dist'),
    filename: 'bundle.js'
  };

  config.plugins = [
    new CopyWebpackPlugin([
      {
        from: 'src/index.html'
      },
      {
        from: 'src/images'
      }
    ]),
    new ExtractTextPlugin("styles.css")
  ];

  config.eslint = {
    configFile: './.eslintrc'
  };

  config.module.loaders = [
    {
      test: /\.js$/,
      loader: 'babel?presets[]=es2015',
      exclude: /node_modules/
    },
    {
      test: /\.html$/,
      loader: path.join('angular-template?relativeTo=', path.resolve(__dirname, './src'), '/!html')
    },
    {
      test: /\.css$/,
      loader: ExtractTextPlugin.extract("style-loader", "css-loader")
    },
    {
      test: /\.png$/,
      loader: 'url-loader?limit=100000'
    },
    {
      test: /\.woff(2)?(\?v=[0-9]\.[0-9]\.[0-9])?$/,
      loader: 'url-loader?limit=10000&mimetype=application/font-woff'
    },
    {
      test: /\.(ttf|otf|eot|svg)(\?v=[0-9]\.[0-9]\.[0-9])?|(jpg|gif)$/,
      loader: 'file-loader'
    }
  ];
}

if (isDevBuild) {
  console.log('**********************************************************************');
  console.log('*                          DEVELOPMENT BUILD                         *');
  console.log('**********************************************************************');
}

if (isTestBuild) {
  console.log('**********************************************************************');
  console.log('*                             TEST BUILD                             *');
  console.log('**********************************************************************');
}

if (isProdBuild) {

  console.log('**********************************************************************');
  console.log('*                          PRODUCTION BUILD                          *');
  console.log('**********************************************************************');

  // only do linting for production
  // builds so we can do log debugging and other stuff
  config.module.preLoaders.push({
    test: /\.js$/,
    loader: 'eslint-loader',
    include: path.join(__dirname, '/src'),
    exclude: /node_modules/
  });
}

module.exports = config;