const path = require('path');
const to2 = require('2webpack2');
// const webpack = require('webpack');
const ProgressBarPlugin = require('progress-bar-webpack-plugin');
const getPostcssPlugin = require('../../build/utils/postcss_pipe');

let webpackConfig = {
  output: {
    path: path.resolve(process.cwd(), 'dist'),
    publicPath: '/dist/',
    filename: '[name].js',
    chunkFilename: '[id].js'
  },
  plugins: [
    new ProgressBarPlugin()
  ],
  postcss: getPostcssPlugin,
  resolve: {
    extensions: [
      '',
      '.js',
      '.json',
      '.vue'
    ],
    alias: {
      src: path.resolve(process.cwd(), 'src'),
      packages: path.resolve(process.cwd(), 'packages'),
      examples: path.resolve(process.cwd(), 'examples'),
      vue$: 'vue/dist/vue.common.js'
    }
  },
  resolveLoader: {},
  module: {
    loaders: [
      {
        test: /\.(jsx?|babel|es6)$/,
        include: path.resolve(process.cwd()),
        exclude: /node_modules|utils\/popper\.js|utils\/date.\js/,
        loaders: [
          'babel-loader'
        ]
      },
      {
        test: /\.json$/,
        loaders: [
          'json-loader'
        ]
      },
      {
        test: /\.css$/,
        loaders: [
          'style-loader',
          'css-loader',
          'postcss-loader'
        ]
      },
      {
        test: /\.html$/,
        loaders: [
          'html-loader?minimize=false'
        ]
      },
      {
        test: /\.otf|ttf|woff2?|eot(\?\S*)?$/,
        loader: 'url-loader',
        query: {
          limit: 10000,
          name: 'static/[name].[hash:7].[ext]'
        }
      },
      {
        test: /\.svg(\?\S*)?$/,
        loader: 'url-loader',
        query: {
          limit: 10000,
          name: 'static/[name].[hash:7].[ext]'
        }
      },
      {
        test: /\.(gif|png|jpe?g)(\?\S*)?$/,
        loader: 'url-loader',
        query: {
          limit: 10000,
          name: 'static/[name].[hash:7].[ext]'
        }
      },
      {
        test: /\.vue$/,
        loaders: [
          'vue-loader'
        ]
      }
    ],
    preLoaders: [
      {
        test: /\.js$/,
        loader: 'isparta',
        exclude: /node_modules|utils\/popper\.js|utils\/date.\js/,
        include: /src|packages/
      },
      {
        test: /\.jsx?$/,
        exclude: /node_modules|bower_components/,
        loader: 'eslint-loader'
      },
      {
        test: /\.vue$/,
        exclude: /node_modules|bower_components/,
        loader: 'eslint-loader'
      }
    ],
    postLoaders: []
  },
  devtool: '#inline-source-map',
  vue: {
    loaders: {
      css: 'vue-style-loader!css-loader?sourceMap',
      less: 'vue-style-loader!css-loader?sourceMap!less-loader?sourceMap',
      sass: 'vue-style-loader!css-loader?sourceMap!sass-loader?indentedSyntax&sourceMap',
      scss: 'vue-style-loader!css-loader?sourceMap!sass-loader?sourceMap',
      stylus: 'vue-style-loader!css-loader?sourceMap!stylus-loader?sourceMap',
      styl: 'vue-style-loader!css-loader?sourceMap!stylus-loader?sourceMap',
      js: 'isparta-loader!eslint-loader'
    },
    preserveWhitespace: false
  },
  eslint: {
    emitWarning: true
  }
};

module.exports = to2(webpackConfig, {quiet: true, context: true});