import WebpackDevServer from 'webpack-dev-server';
import webpack from 'webpack';
import fs from 'fs';
import path from 'path';


export function startDevServer({
    webpackConfig,
    host,
    port,
    proxy,
    https,
    beforeMiddlewares,
    afterMiddlewares,
    customerDevServerConfig
}) {
    const options = {
        contentBase: webpackConfig.output.path,
        hot: true,
        host,
        sockHost: host,
        sockPort: port,
        proxy,
        compress: true,
        noInfo: true,
        disableHostCheck: true,
        clientLogLevel: 'silent',
        stats: 'errors-only',
        before: (app) => {
            beforeMiddlewares.forEach((middleware) => {
                app.use(middleware);
            });
        },
        after: (app) => {
            afterMiddlewares.forEach((middleware) => {
                app.use(middleware);
            });
        },
        headers: {
            'access-control-allow-origin': '*'
        },
        ...(customerDevServerConfig || {})
    };
    if (https) {
        options.https = true;
        options.key = fs.readFileSync(path.resolve(__dirname, './cert/key.pem'));
        options.cert = fs.readFileSync(path.resolve(__dirname, './cert/cert.pem'));
    }
    WebpackDevServer.addDevServerEntrypoints(webpackConfig, options);
    const compiler = webpack(webpackConfig);
    const server = new WebpackDevServer(compiler, options);

    server.listen(port, host, (err) => {
        if (err) {
            console.error(err);
        }
    });
    return server;
}
