#!/usr/bin/env bash
set -euo pipefail

WORKSPACE=$(unset CDPATH && cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
source "$WORKSPACE/../lib/lib.sh"

VENDOR=${1:-"aws"}
ENV=${2:-"dev"}
REGION=${3:-""}
LOGICAL_REGION=${4:-"$REGION"}
ISBYOC=${5:-"false"}

: "${AUTH0_CLIENT_ID:?AUTH0_CLIENT_ID is required for managed ops deploys}"
: "${AUTH0_CLIENT_SECRET:?AUTH0_CLIENT_SECRET is required for managed ops deploys}"

CHARTS="$WORKSPACE/../charts"
OPS_API_BASE_URL="${O11Y_OPS_API_BASE_URL:-$(resolve_managed_ops_api_base_url "$ENV")}"
prepare_bootstrap_ops_api
OPS_API_BASE_URL="$(resolve_effective_ops_api_base_url "$OPS_API_BASE_URL")"
REGION_ID="${VENDOR}-${REGION}"

if [[ "${BOOTSTRAP:-false}" == "true" ]]; then
    echo "using bootstrap local ops API base URL: $OPS_API_BASE_URL"
else
    echo "using globalserver ops API base URL: $OPS_API_BASE_URL"
fi
echo "deploying dataplane components for region ID: $REGION_ID, logical region: $LOGICAL_REGION, is BYOC: $ISBYOC"

deploy_managed_helmrelease() {
    local name="$1"
    local namespace="$2"
    local component="$3"
    local values_file="$4"
    local version="$5"

    if [[ ! -f "$values_file" ]]; then
        echo "Error: values file not found for ${component}: ${values_file}"
        exit 1
    fi

    if ! create_or_update_helmrelease "$OPS_API_BASE_URL" "$name" "$namespace" "$component" "$values_file" "$version" "$REGION_ID" "$LOGICAL_REGION"; then
        echo "Failed to deploy ${component}"
        exit 1
    fi

    if ! wait_for_helmrelease_ready "$OPS_API_BASE_URL" "$name" "$REGION_ID" "$LOGICAL_REGION"; then
        echo "Failed waiting for ${name} to become Ready"
        exit 1
    fi
}

echo "start deploying dataplane-vmcluster via ops API"
VMCLUSTER_VALUES="$WORKSPACE/vmcluster/envs/${ENV}-${VENDOR}-${LOGICAL_REGION}/values.yaml"
VMCLUSTER_VERSION="$(read_chart_version "$CHARTS/vmcluster")"
deploy_managed_helmrelease "dataplane-vmcluster" "observability" "vmcluster" "$VMCLUSTER_VALUES" "$VMCLUSTER_VERSION"
echo "end deploying dataplane-vmcluster via ops API"

echo "start deploying loki via ops API"
LOKI_VALUES="$WORKSPACE/loki/envs/${ENV}-${VENDOR}-${LOGICAL_REGION}/values.yaml"
LOKI_VERSION="${LOKI_CHART_VERSION:-6.29.0}"
# Optional per-region chart version override, e.g. for a staged loki upgrade
# of a single region without affecting others.
LOKI_VERSION_FILE="$WORKSPACE/loki/envs/${ENV}-${VENDOR}-${LOGICAL_REGION}/chart-version"
if [[ -f "$LOKI_VERSION_FILE" ]]; then
    LOKI_VERSION=$(tr -d '[:space:]' < "$LOKI_VERSION_FILE")
    echo "using per-region loki chart version ${LOKI_VERSION} from ${LOKI_VERSION_FILE}"
fi
deploy_managed_helmrelease "loki-ha" "observability" "loki" "$LOKI_VALUES" "$LOKI_VERSION"
echo "end deploying loki via ops API"

echo "start deploying alertmanager via ops API"
AM_VALUES="$WORKSPACE/alertmanager/envs/${ENV}-${VENDOR}-${LOGICAL_REGION}/values.yaml"
AM_VERSION="$(read_chart_version "$CHARTS/alertmanager")"
deploy_managed_helmrelease "alertmanager-regional" "default" "alertmanager-regional" "$AM_VALUES" "$AM_VERSION"
echo "end deploying alertmanager via ops API"
