text: "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 });
  class ValidatePlatformCommandBase {
      constructor($options, $platformsDataService, $platformValidationService, $projectData) {
          this.$options = $options;
          this.$platformsDataService = $platformsDataService;
          this.$platformValidationService = $platformValidationService;
          this.$projectData = $projectData;
      }
      canExecuteCommandBase(platform, options) {
          return __awaiter(this, void 0, void 0, function* () {
              options = options || {};
              const validatePlatformOutput = yield this.validatePlatformBase(platform, options.notConfiguredEnvOptions);
              const canExecute = this.canExecuteCommand(validatePlatformOutput);
              let result = canExecute;
              if (canExecute && options.validateOptions) {
                  result = yield this.$platformValidationService.validateOptions(this.$options.provision, this.$options.teamId, this.$projectData, platform);
              }
              return result;
          });
      }
      validatePlatformBase(platform, notConfiguredEnvOptions) {
          return __awaiter(this, void 0, void 0, function* () {
              const platformData = this.$platformsDataService.getPlatformData(platform, this.$projectData);
              const platformProjectService = platformData.platformProjectService;
              const result = yield platformProjectService.validate(this.$projectData, this.$options, notConfiguredEnvOptions);
              return result;
          });
      }
      canExecuteCommand(validatePlatformOutput) {
          return validatePlatformOutput && validatePlatformOutput.checkEnvironmentRequirementsOutput && validatePlatformOutput.checkEnvironmentRequirementsOutput.canExecute;
      }
  }
  exports.ValidatePlatformCommandBase = ValidatePlatformCommandBase;
  