"use strict";
/*
 * Copyright © 2020 Atomist, Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
Object.defineProperty(exports, "__esModule", { value: true });
exports.getClusterLabel = exports.getCluster = void 0;
const environment_1 = require("../../../api/goal/support/environment");
/**
 * Determine cluster name from goal environment and fulfillment.  If
 * the fulfillment is provided, the cluster name is parsed from the
 * goal fulfillment name, stripping any NPM scope and everything
 * before the first underscore, `_`, if they exist.
 *
 * If there is no fulfillment, the cluster name derived from the goal
 * environment.  An environment of `StagingEnvironment` or
 * `ProductionEnvironment` is mapped to an appropriate string.  Any
 * other goal environment is simplified to the name of the
 * environment.  If the environment is not truthy an empty string is
 * returned.  Otherwise the `environment` string is returned
 * unchanged.
 *
 * @param environment FulfillableGoalDetails.environment
 * @param fulfillment GoalFulfillment.name
 * @return cluster name
 */
function getCluster(environment, fulfillment) {
    if (fulfillment && environment) {
        return cleanFulfillment(fulfillment) + " " + envString(environment);
    }
    else if (fulfillment) {
        return cleanFulfillment(fulfillment);
    }
    else if (environment) {
        return envString(environment);
    }
    else {
        return "";
    }
}
exports.getCluster = getCluster;
/**
 * Generate the tail of a goal label using [[getCluster]] to determine
 * an appropriate deployment target.
 *
 * @param environment FulfillableGoalDetails.environment
 * @param fulfillment GoalFulfillment.name
 * @return Formatted phrase including cluster name
 */
function getClusterLabel(environment, fulfillment) {
    const cluster = getCluster(environment, fulfillment);
    if (cluster === "code") {
        return " independent of environment";
    }
    else if (cluster) {
        return ` to \`${cluster}\``;
    }
    else {
        return "";
    }
}
exports.getClusterLabel = getClusterLabel;
function cleanFulfillment(fulfillment) {
    return fulfillment.replace(/^@.*?\//, "").replace(/^.*?_/, "");
}
function envString(environment) {
    const geRegExp = /^\d+-(\w+)\/$/;
    // GoalEnvironments are strings, so check if string matches pattern
    if (geRegExp.test(environment)) {
        switch (environment) {
            case environment_1.StagingEnvironment:
                return "testing";
            case environment_1.ProductionEnvironment:
                return "production";
            default:
                return environment.replace(geRegExp, "$1");
        }
    }
    else {
        return environment;
    }
}
//# sourceMappingURL=cluster.js.map