const webpack = require('webpack') const webpackMiddleware = require('webpack-dev-middleware') const webpackHotMiddleware = require('webpack-hot-middleware') const path = require('path') const ExtractTextPlugin = require(“extract-text-webpack-plugin”) const AssetsPlugin = require('assets-webpack-plugin') const StatsPlugin = require('stats-webpack-plugin'); const assetsPluginInstance = new AssetsPlugin()

let scssLoader; if(process.env.NODE_ENV === 'prodution'){

scssLoader = {
  test: /\.scss$/,
  loader: ExtractTextPlugin.extract({
    fallback: 'style-loader',
    use: 'css-loader?sourceMap!autoprefixer-loader!sass-loader?sourceMap'
  })
}

} else {

scssLoader = {
  test: /\.scss$/,
  use: [
    { loader: "style-loader" },
    { loader: "css-loader" },
    { loader: "sass-loader" }
  ]
}

}

const loaders = {

loaders: [
  scssLoader,
  {
    test: /\.styl$/,
    loader: 'style-loader!css-loader!stylus-loader'
  },
  {
    test: /\.(js|jsx)$/,
    exclude: /node_modules/,
    loader: 'babel-loader',
    query: {
      presets: ["es2015","react","stage-0"]
    }
  },
  {
    test: /\.coffee$/,
    loader: "coffee-loader"
  },
  {
    test: /\.(coffee\.md|litcoffee)$/,
    loader: "coffee-loader?literate"
  },
  {
    test: /\.(woff|woff2|ttf|eot|svg)(\?v=[0-9]\.[0-9]\.[0-9])?$/,
    loader: 'base64-font-loader'
  },
  {
    test: /.*\.(gif|png|jpe?g|svg)$/i,
    loaders: [
      'file-loader?hash=sha512&digest=hex&name=[hash].[ext]'
    ]
  }
]

}

const devConfig = {

devtool: 'eval-source-map',
entry: [ 'webpack-hot-middleware/client?reload=true', path.resolve(__dirname, "./assets/js/index.js") ],
output: {
  path: path.join(__dirname, "./build/"),
  filename: 'client.js',
  publicPath: '/assets/'
},
plugins: [
  new webpack.optimize.OccurrenceOrderPlugin(),
  new webpack.HotModuleReplacementPlugin(),
  new webpack.NoEmitOnErrorsPlugin(),
  new webpack.DefinePlugin({
    'process.env.NODE_ENV': JSON.stringify('development')
  })
],
module: loaders

}

var compiler = webpack(devConfig); var middleware = webpackMiddleware(compiler, {

publicPath: devConfig.output.publicPath,
contentBase: 'src',
stats: {
  colors:       true,
  hash:         false,
  timings:      true,
  chunks:       false,
  chunkModules: false,
  modules:      false
}

})

const webpackDev = function(app){

app.use(middleware);
app.use(webpackHotMiddleware(compiler));

}

module.exports = {

prod: {
  entry: [ path.resolve(__dirname, "./src/index.js") ],
  output: {
    path: path.join(__dirname, "../build/"),
    filename: 'client[hash].js',
    publicPath: '/assets/'
  },
  plugins: [
    new webpack.optimize.OccurrenceOrderPlugin(),
    new webpack.optimize.UglifyJsPlugin({ compressor: { warnings: false, screw_ie8: true } }),
    new StatsPlugin('webpack.stats.json', { source: false, modules: false }),
    new webpack.DefinePlugin({
      'process.env.NODE_ENV': JSON.stringify(process.env.NODE_ENV)
    }),
    new webpack.ProvidePlugin({
      "React": "react",
    }),
    new ExtractTextPlugin("client[hash].css")
  ],
  module: loaders
},

serverConfig: function(app){

  // assets urls
  let hash = '';
  if(process.env.NODE_ENV === "production"){
    const webpackClientPath = path.resolve(__dirname, './build/webpack.stats.json')
    const clientConfig = JSON.parse(fs.readFileSync(webpackClientPath, 'utf8'))
    hash = clientConfig.hash
    app.use('/assets', express.static('build'))
  } else {
    webpackDev(app)
  }

  // images urls
  let prefix = 'https://cl.svc.store'
  prefix += process.env.NODE_ENV === "production" ? '' : 'store-dev'
  const imgUrl = (command,id) => {
    return prefix + '/' + command + '/' + id
  }

  app.use( (req, res, next) => {
    res.locals.hash = hash
    res.locals.env = process.env.NODE_ENV
    res.locals.imgUrl = imgUrl
    next()
  })

}

}