"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ValidatePlatformCommandBase = void 0;
class ValidatePlatformCommandBase {
    constructor($options, $platformsDataService, $platformValidationService, $projectData) {
        this.$options = $options;
        this.$platformsDataService = $platformsDataService;
        this.$platformValidationService = $platformValidationService;
        this.$projectData = $projectData;
    }
    async canExecuteCommandBase(platform, options) {
        options = options || {};
        const validatePlatformOutput = await this.validatePlatformBase(platform, options.notConfiguredEnvOptions);
        const canExecute = this.canExecuteCommand(validatePlatformOutput);
        let result = canExecute;
        if (canExecute && options.validateOptions) {
            result = await this.$platformValidationService.validateOptions(this.$options.provision, this.$options.teamId, this.$projectData, platform);
        }
        return result;
    }
    async validatePlatformBase(platform, notConfiguredEnvOptions) {
        const platformData = this.$platformsDataService.getPlatformData(platform, this.$projectData);
        const platformProjectService = platformData.platformProjectService;
        const result = await platformProjectService.validate(this.$projectData, this.$options, notConfiguredEnvOptions);
        return result;
    }
    canExecuteCommand(validatePlatformOutput) {
        return (validatePlatformOutput &&
            validatePlatformOutput.checkEnvironmentRequirementsOutput &&
            validatePlatformOutput.checkEnvironmentRequirementsOutput.canExecute);
    }
}
exports.ValidatePlatformCommandBase = ValidatePlatformCommandBase;
