// SPDX-License-Identifier: Apache-2.0
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
    if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
    return c > 3 && r && Object.defineProperty(target, key, r), r;
};
var __metadata = (this && this.__metadata) || function (k, v) {
    if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
};
var __param = (this && this.__param) || function (paramIndex, decorator) {
    return function (target, key) { decorator(target, key, paramIndex); }
};
import os from 'node:os';
import { SoloError } from '../errors/solo-error.js';
import { ShellRunner } from '../shell-runner.js';
import { HelmDependencyManager } from './helm-dependency-manager.js';
import { container, inject, injectable } from 'tsyringe-neo';
import * as constants from '../constants.js';
import { InjectTokens } from '../dependency-injection/inject-tokens.js';
import { KindDependencyManager } from './kind-dependency-manager.js';
import { KubectlDependencyManager } from './kubectl-dependency-manager.js';
let DependencyManager = class DependencyManager extends ShellRunner {
    dependancyManagerMap;
    constructor(helmDepManager, kindDepManager, kubectlDependencyManager) {
        super();
        this.dependancyManagerMap = new Map();
        if (helmDepManager) {
            this.dependancyManagerMap.set(constants.HELM, helmDepManager);
        }
        else {
            this.dependancyManagerMap.set(constants.HELM, container.resolve(HelmDependencyManager));
        }
        if (kindDepManager) {
            this.dependancyManagerMap.set(constants.KIND, kindDepManager);
        }
        else {
            this.dependancyManagerMap.set(constants.KIND, container.resolve(KindDependencyManager));
        }
        if (kubectlDependencyManager) {
            this.dependancyManagerMap.set(constants.KUBECTL, kubectlDependencyManager);
        }
        else {
            this.dependancyManagerMap.set(constants.KUBECTL, container.resolve(KubectlDependencyManager));
        }
    }
    /**
     * Check if the required dependency is installed or not
     * @param dep - is the name of the program
     */
    async checkDependency(dep) {
        this.logger.debug(`Checking for dependency: ${dep}`);
        let status = false;
        const manager = this.dependancyManagerMap.get(dep);
        if (manager) {
            status = await manager.install();
        }
        if (!status) {
            throw new SoloError(`Dependency '${dep}' is not found`);
        }
        this.logger.debug(`Dependency '${dep}' is found`);
        return true;
    }
    taskCheckDependencies(deps) {
        return deps.map(dep => {
            return {
                title: `Check dependency: ${dep} [OS: ${os.platform()}, Release: ${os.release()}, Arch: ${os.arch()}]`,
                task: () => this.checkDependency(dep),
            };
        });
    }
};
DependencyManager = __decorate([
    injectable(),
    __param(0, inject(InjectTokens.HelmDependencyManager)),
    __param(1, inject(InjectTokens.KindDependencyManager)),
    __param(2, inject(InjectTokens.KubectlDependencyManager)),
    __metadata("design:paramtypes", [HelmDependencyManager,
        KindDependencyManager,
        KubectlDependencyManager])
], DependencyManager);
export { DependencyManager };
//# sourceMappingURL=dependency-manager.js.map