var webpackConfig = require('./webpack.config.js');
delete webpackConfig.entry;
delete webpackConfig.output;
webpackConfig.devtool = 'inline-source-map';
webpackConfig.plugins = [];

// Karma configuration
// Generated on Tue Aug 22 2017 13:37:43 GMT+0200 (CEST)

module.exports = function(config) {
    let baseConfig = {

    // base path that will be used to resolve all patterns (eg. files, exclude)
        basePath: '',

    // frameworks to use
    // available frameworks: https://npmjs.org/browse/keyword/karma-adapter
        frameworks: ['jasmine'],

    // list of files / patterns to load in the browser
        files: [
            {pattern: 'client/test_index.js', watched: false}
        ],

    // list of files to exclude
        exclude: [],

        webpack: webpackConfig,

        webpackMiddleware: {
            stats: 'errors-only'
        },

        webpackServer: {
            noInfo: true
        },

    // preprocess matching files before serving them to the browser
    // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor
        preprocessors: {
            './client/test_index.js': ['webpack', 'sourcemap']
        },

    // test results reporter to use
    // possible values: 'dots', 'progress'
    // available reporters: https://npmjs.org/browse/keyword/karma-reporter
        reporters: ['progress'],

    // web server port
        port: 9876,

    // enable / disable colors in the output (reporters and logs)
        colors: true,

    // level of logging
    // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
        logLevel: config.LOG_INFO,

    // enable / disable watching file and executing tests whenever any file changes
        autoWatch: true,

    // start these browsers
    // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
        browsers: [],

    // Continuous Integration mode
    // if true, Karma captures browsers, runs the tests and exits
        singleRun: false,

    // Concurrency level
    // how many browser should be started simultaneous
        concurrency: Infinity,

        plugins: [
            'karma-jasmine',
            'karma-webpack',
            'karma-chrome-launcher',
            'karma-firefox-launcher',
            'karma-sourcemap-loader'
        ]
    };

    let browserConfig;

    if (process.env.FIREFOX_BIN) {
        browserConfig = {
            browsers: ['FirefoxHeadless'],
            customLaunchers: {
                FirefoxHeadless: {
                    base: 'Firefox',
                    flags: ['-headless']
                }
            }
        };
    } else {
        browserConfig = {
            browsers: ['ChromeNoSandboxHeadless'],
            customLaunchers: {
                ChromeNoSandboxHeadless: {
                    base: 'Chrome',
                    flags: [
                        '--no-sandbox',
                        // See https://chromium.googlesource.com/chromium/src/+/lkgr/headless/README.md
                        '--headless',
                        '--disable-gpu',
                        // Without a remote debugging port, Google Chrome exits immediately.
                        ' --remote-debugging-port=9222'
                    ]
                }
            }
        };
    }

    Object.assign(baseConfig, browserConfig);
    config.set(baseConfig);
};