// This is a workaround for https://github.com/karma-runner/karma-teamcity-reporter/issues/86

// logger is needed only to log cases when `browser.id` is not in browserResults
const logger = require('../../../build/js/node_modules/karma/lib/logger');

const NewReporter = function(baseReporterDecorator, config, emitter) {

    const path = require('path');
    const fs = require('fs');
    const kotlinVersion = fs.readFileSync(path.resolve(__dirname, "../../../buildSrc/build/kotlin.version"), 'utf8');

    const kotlinReporterModule = require(`../../../build/js/packages_imported/kotlin-test-js-runner/${kotlinVersion}/karma-kotlin-reporter`);
    const KotlinReporter = kotlinReporterModule['reporter:karma-kotlin-reporter'][1];
    this.$inject = KotlinReporter.$inject

    KotlinReporter.call(this, baseReporterDecorator, config, emitter);

    const consoleLog = logger.create("NewReporter-KotlinReporter");

    const onBrowserLogOriginal = this.onBrowserLog;
    const onSpecCompleteOriginal = this.onSpecComplete;
    const onBrowserStartOriginal = this.onBrowserStart;


    this.onBrowserStart = (browser) => {
        consoleLog.info("onBrowserStart: id = " + browser.id);
        onBrowserStartOriginal(browser);
    }

    this.onBrowserLog = (browser, log, type) => {
        if (!this.browserResults[browser.id]) {
            consoleLog.info("onBrowserLog: force onBrowserStart id=" + browser.id);
            this.onBrowserStart(browser);
        }
        onBrowserLogOriginal(browser, log, type);
    }

    this.onSpecComplete = function (browser, result) {
        if (!this.browserResults[browser.id]) {
            consoleLog.info("onSpecComplete: force onBrowserStart id=" + browser.id);
            this.onBrowserStart(browser);
        }
        onSpecCompleteOriginal(browser, result);
    }
}

module.exports = {
    'reporter:karma-kotlin-reporter': ['type', NewReporter]
};
