"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
    return new (P || (P = Promise))(function (resolve, reject) {
        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
        function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
        step((generator = generator.apply(thisArg, _arguments || [])).next());
    });
};
Object.defineProperty(exports, "__esModule", { value: true });
const os_1 = require("os");
class InitializeService {
    constructor($injector) {
        this.$injector = $injector;
    }
    initialize(initOpts) {
        return __awaiter(this, void 0, void 0, function* () {
            initOpts = initOpts || {};
            const $logger = this.$injector.resolve("logger");
            if (initOpts.loggerOptions) {
                $logger.initialize(initOpts.loggerOptions);
            }
            else {
                $logger.initializeCliLogger();
            }
            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;
                }
            }
            yield this.showWarnings($logger);
        });
    }
    showWarnings($logger) {
        return __awaiter(this, void 0, void 0, function* () {
            const $sysInfo = $injector.resolve("sysInfo");
            const systemWarnings = yield $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;
$injector.register("initializeService", InitializeService);
