const { environment } = require('@rails/webpacker');
const webpack = require('webpack');
const path = require('path');

const htmlErb = require('./loaders/html_erb');
const js = require('./loaders/js');
const jsErb = require('./loaders/js_erb');
const sass = require('./loaders/sass');
const sassErb = require('./loaders/sass_erb');
const html = require('./loaders/html');
const uiTour = require('./loaders/ui-tour');

environment.plugins.prepend('Provide', new webpack.ProvidePlugin({
  $: 'jquery',
  jQuery: 'jquery',
  'window.jQuery': 'jquery',
  _: 'lodash',
  Hone: 'hone',
  Tether: 'tether',
  Holder: 'holderjs',
  'window.CodeMirror': 'codemirror',
  MediumEditor: 'medium-editor',
  Humanize: path.resolve(path.join(__dirname, '../../app/frontend/src/javascript/lib/humanize.js')),
  moment: 'moment',
  Application: [path.resolve(path.join(__dirname, '../../app/frontend/src/javascript/app.js')), 'Application']
}));

environment.loaders.prepend('js-erb', jsErb);
environment.loaders.prepend('html-erb', htmlErb);
environment.loaders.prepend('sass-erb', sassErb);
environment.loaders.prepend('js', js);
environment.loaders.append('html', html);
environment.loaders.append('sass', sass);
environment.loaders.append('uiTour', uiTour);
environment.loaders.insert('foo', jsErb, { alter: 'bar' });

environment.splitChunks();

module.exports = environment;