const path = require('path');
const HtmlWebpackPlugin = require('html-webpack-plugin');
const WebpackMerge = require('webpack-merge');
const baseConfig = require('./webpack.base.js');

module.exports = WebpackMerge.merge(baseConfig, {
  mode: 'development',
  //开发环境下默认启用cache，在内存中对已经构建的部分进行缓存
  //避免其他模块修改，但是该模块未修改时候，重新构建，能够更快的进行增量构建
  //属于空间换时间的做法
  cache: true,
  
  // 代码入口
  entry: {
    // 注册界面
    main: './src/main.js',
  },

  output: {
    path: path.resolve(__dirname, '../dist'),
    publicPath: '/',
    filename: 'app-client-[name].js',
    chunkFilename: 'app-client-chunk-[name].js',
  },

  watchOptions: {
    ignored: ['**/node_modules', '/bat/', '/dist/', '/public/', '/static/', '/test/'],
    poll: 2000,
  },

  devServer: {

    port: 8087,
    compress: false,
    
    // 修复BUG：Invalid Host header
    allowedHosts: 'all',

    static: [
      {
        directory: path.join(__dirname, 'client-base-v5/static'),
        publicPath: '/static',
      },
      {
        directory: path.join(__dirname, 'client-base-v5/public'),
        publicPath: '/',
      },
    ],

    // historyApiFallback: true,
    // historyApiFallback: {
    //   rewrites: [
    //     { from: /.*/, to: path.posix.join('/', 'index.html') },
    //   ],
    // },

    headers: {
      'Access-Control-Allow-Origin': '*',
      // eslint-disable-next-line max-len
      //'Content-Security-Policy': 'upgrade-insecure-requests; default-src \'none\'; base-uri \'self\'; frame-ancestors \'none\'; script-src \'self\' \'nonce-11111\'; connect-src \'self\'; form-action \'self\'; frame-src \'self\'; img-src \'self\'; font-src \'self\'; style-src \'self\' \'nonce-11111\'; manifest-src \'none\'; worker-src \'self\'; media-src \'self\'; object-src \'self\';',
    },
    
    proxy: {
      '/api': {
        target: 'http://192.168.1.8:10029/',
        ws: false,
        changeOrigin: true,
        secure:true,
      },
      '/static': {
        target: 'http://192.168.1.8:10029/',
        ws: false,
        changeOrigin: true,
        secure:true,
      },
      '/content': {
        target: 'http://192.168.1.8:10029/',
        ws: false,
        changeOrigin: true,
        secure:true,
      },
      '/dashboard': {
        target: 'http://192.168.1.8:10029/',
        ws: false,
        changeOrigin: true,
        secure:true,
      },
      '/assets': {
        target: 'http://192.168.1.8:10029/',
        ws: false,
        changeOrigin: true,
        secure:true,
      },
      '/mock': {
        target: 'http://192.168.1.8:10029/',
        ws: false,
        changeOrigin: true,
        secure:true,
      },
      '/authApi': {
        target: 'http://192.168.1.8:10029/',
        ws: false,
        changeOrigin: true,
        secure:true,
      },
      '/Dictionary': {
        target: 'http://192.168.1.8:10029/',
        ws: false,
        changeOrigin: true,
        secure:true,
      },
      '/Files': {
        target: 'http://192.168.1.8:10029/',
        ws: false,
        changeOrigin: true,
        secure:true,
      },
      '/WebSocket': {
        target: 'http://192.168.1.8:10029/',
        ws: true,
        changeOrigin: true,
      },
      '/TrainVideo': {
        target: 'http://192.168.1.8:10029/',
        ws: true,
        changeOrigin: true,
      },
      '/module': {
        target: 'http://192.168.1.8:10029/',
        ws: true,
        changeOrigin: true,
        secure:true,
      },
    },
    client: {
      overlay: false, //解决ResizeObserver loop completed with undelivered notifications
    },
  },

  devtool: 'source-map',


  plugins: (module.exports.plugins || []).concat([
    new HtmlWebpackPlugin({
      title: 'Prodog',
      template: './public/index-debug.html',   // 源模板文件
      filename: './index.html',                   // 输出文件【注意：这里的根路径是module.exports.output.path】
      chunks: ['main'],
    }),
  ]),
});
