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

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

VENDOR=${1:-"aws"}
ENV=${2:-"dev"}
REGION=${3:-""}
LOGICAL_REGION=${4:-"$REGION"}
BYOC_ENABLED=${5:-"false"}
CHARTS="$WORKSPACE/../charts"
OPS_API_BASE_URL="${O11Y_OPS_API_BASE_URL:-}"
REGION_ID="${VENDOR}-${REGION}"
MERGED_VALUES_FILES=()

if [[ -z "$OPS_API_BASE_URL" ]]; then
  OPS_API_BASE_URL="$(resolve_managed_ops_api_base_url "$ENV")"
fi
prepare_bootstrap_ops_api
OPS_API_BASE_URL="$(resolve_effective_ops_api_base_url "$OPS_API_BASE_URL")"

if [[ "${BOOTSTRAP:-false}" == "true" ]]; then
  echo "using bootstrap local ops API base URL: $OPS_API_BASE_URL"
fi

cleanup_merged_values() {
  local file
  for file in "${MERGED_VALUES_FILES[@]}"; do
    rm -f "$file"
  done
}
append_exit_trap cleanup_merged_values

request_helmrelease_retry() {
  local name="$1"
  local timestamp

  timestamp="$(date -u +%Y-%m-%dT%H:%M:%SZ)"
  kubectl -n ops-system annotate helmrelease "$name" \
    reconcile.fluxcd.io/resetAt="$timestamp" \
    reconcile.fluxcd.io/requestedAt="$timestamp" \
    reconcile.fluxcd.io/forceAt="$timestamp" \
    --overwrite
}

deploy_managed_release() {
  local name="$1"
  local component="$2"
  local env_values="$3"
  local image_values="$4"
  local version="$5"
  local values_file

  values_file="$(merge_release_values "$env_values" "$image_values")"
  MERGED_VALUES_FILES+=("$values_file")

  create_or_update_helmrelease \
    "$OPS_API_BASE_URL" \
    "$name" \
    "observability" \
    "$component" \
    "$values_file" \
    "$version" \
    "$REGION_ID" \
    "$LOGICAL_REGION"

  if [[ "${SKIP_CLUSTER_ACCESS:-false}" == "true" ]]; then
    echo "Skipping HelmRelease retry annotation for ${name}: cluster access is disabled"
  else
    request_helmrelease_retry "$name"
  fi
  wait_for_helmrelease_ready "$OPS_API_BASE_URL" "$name" "$REGION_ID" "$LOGICAL_REGION"
}

deploy_managed_release \
  "diagnosis-query" \
  "diagnosis-query" \
  "$WORKSPACE/diagnosis-query/envs/${ENV}-${VENDOR}-${LOGICAL_REGION}/values.yaml" \
  "$(resolve_image_tag_file "$WORKSPACE/diagnosis-query" "$ENV" "$VENDOR" "$LOGICAL_REGION")" \
  "$(read_chart_version "$CHARTS/diagnosis-query")"

deploy_managed_release \
  "o11ydiagnosis-deltalake" \
  "o11ydiagnosis-deltalake" \
  "$WORKSPACE/o11ydiagnosis-deltalake/envs/${ENV}-${VENDOR}-${LOGICAL_REGION}/values.yaml" \
  "$(resolve_image_tag_file "$WORKSPACE/o11ydiagnosis-deltalake" "$ENV" "$VENDOR" "$LOGICAL_REGION")" \
  "$(read_chart_version "$CHARTS/o11ydiagnosis-deltalake")"
