"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.InitializeService = void 0;
const os_1 = require("os");
const _ = require("lodash");
const constants_1 = require("../constants");
const yok_1 = require("../common/yok");
class InitializeService {
    constructor($injector) {
        this.$injector = $injector;
    }
    async initialize(initOpts) {
        initOpts = initOpts || {};
        const $logger = this.$injector.resolve("logger");
        const $options = this.$injector.resolve("options");
        if (initOpts.loggerOptions) {
            $logger.initialize(initOpts.loggerOptions);
        }
        else {
            const loggerLevel = $options.log &&
                constants_1.LoggerLevel[$options.log.toUpperCase()];
            $logger.initializeCliLogger({ level: loggerLevel });
        }
        if (initOpts.settingsServiceOptions) {
            const $settingsService = this.$injector.resolve("settingsService");
            $settingsService.setSettings(initOpts.settingsServiceOptions);
        }
        if (initOpts.extensibilityOptions) {
            if (initOpts.extensibilityOptions.pathToExtensions) {
                const $extensibilityService = this.$injector.resolve("extensibilityService");
                $extensibilityService.pathToExtensions =
                    initOpts.extensibilityOptions.pathToExtensions;
            }
        }
        if ($options.json) {
            $logger.trace("Skipping system warnings for --json commands");
        }
        else {
            await this.showWarnings($logger);
        }
    }
    async showWarnings($logger) {
        const $sysInfo = yok_1.injector.resolve("sysInfo");
        const systemWarnings = await $sysInfo.getSystemWarnings();
        _.each(systemWarnings, (systemWarning) => {
            const message = `${os_1.EOL}${systemWarning.message}${os_1.EOL}`;
            if (systemWarning.severity === "high") {
                $logger.error(message);
            }
            else {
                $logger.warn(message);
            }
        });
    }
}
exports.InitializeService = InitializeService;
yok_1.injector.register("initializeService", InitializeService);
