#!/usr/bin/env bash

set -o errexit
set -o nounset
set -o pipefail

ROOT=$(cd $(dirname "${BASH_SOURCE[0]}")/../../../..; pwd -P)

source $ROOT/hack/lib/vars.sh
source $ROOT/hack/lib/image.sh
source $ROOT/hack/lib/pulumi/util.sh
source $ROOT/hack/lib/pulumi/e2e/config.sh

PULUMI=${PULUMI:-"$ROOT/bin/pulumi"}
KUBECTL=${KUBECTL:-"kubectl"}


# type:
# - cloud: cluster info is from https://api.pulumi.com
# - local: cluster info is mocked by pulumi::e2e::mock.sh
# env:
# - eks: generate manager config for eks
# - gke: generate manager config for gke
# marker: marker is identity of manager for e2e, it's used to diff with another manager for e2e
# version: manager version, default is HEAD
lib::pulumi::e2e::deploy::install_manager() {
    local type=${1:-"local"}
    local env=${2:-"eks"}
    local marker=${3:-""}
    local version=${4:-""}

    lib::pulumi::e2e::config::get_manager_config_path config $env $marker
    lib::pulumi::e2e::config::gen_manager_config $type $env $marker $version

    lib::pulumi::util::login $type

    local stack=e2e-manager-${env}-${marker}
    lib::pulumi::util::ensure_stack $stack $ROOT/cd/projects/manager

    $PULUMI up \
        --stack $stack \
        --yes \
        --refresh \
        --config-file ${config} \
        -C $ROOT/cd/projects/manager

}

lib::pulumi::e2e::deploy::uninstall_manager() {
    local type=${1:-"local"}
    local env=${2:-"eks"}
    local marker=${3:-"$(git config user.name)"}

    lib::pulumi::e2e::config::get_manager_config_path config $env $marker

    lib::pulumi::util::login $type

    local stack=e2e-manager-${env}-${marker}
    $PULUMI destroy \
        --stack $stack \
        --yes \
        --config-file ${config} \
        -C $ROOT/cd/projects/manager

    $PULUMI stack rm ${stack} \
        --yes \
        -C $ROOT/cd/projects/manager
}
