#!/usr/bin/env bash


resolve_image_tag_file() {
  local component_dir="$1"
  local env_name="$2"
  local vendor="$3"
  local logical_region="$4"
  local env_override="$component_dir/envs/${env_name}-${vendor}-${logical_region}/image-tag.yaml"

  if [[ -f "$env_override" ]]; then
    echo "$env_override"
    return 0
  fi

  echo "$component_dir/image-tag.yaml"
}

merge_release_values() {
  local env_values="$1"
  local image_values="$2"
  local merged
  local managed_reconcile_nonce

  managed_reconcile_nonce="$(date -u +%Y-%m-%dT%H:%M:%SZ)"

  merged="$(mktemp "${TMPDIR:-/tmp}/drhouse-managed-values.XXXXXX")"
  # env_values take precedence over image_values in case of conflicts
  yq eval-all 'select(fileIndex == 1) * select(fileIndex == 0)' \
    "$env_values" \
    "$image_values" >"$merged"
  MANAGED_RECONCILE_NONCE="$managed_reconcile_nonce" \
    yq eval '.opsServerReconcileNonce = strenv(MANAGED_RECONCILE_NONCE)' -i "$merged"
  echo "$merged"
}

read_task_collector_image_tag() {
  local env_name="$1"
  local vendor="$2"
  local logical_region="$3"
  local drhouse_dir="$4"
  yq eval '.taskCollector.image.tag' \
    "$(resolve_image_tag_file "$drhouse_dir/o11ydiagnosis-deltalake" "$env_name" "$vendor" "$logical_region")"
}

# Render metrics-stats CronJob manifests with image.tag from image-tag.yaml.
# Args: $1 = source env dir, $2 = image-tag.yaml path, $3 = output dir
render_metrics_stats_manifests() {
  local src_dir="$1"
  local tag_file="$2"
  local out_dir="$3"
  local tag
  local f
  local base

  tag="$(yq eval '.image.tag' "$tag_file")"
  if [[ -z "$tag" || "$tag" == "null" ]]; then
    echo "Error: image.tag is empty in $tag_file" >&2
    return 1
  fi

  mkdir -p "$out_dir"
  for f in "$src_dir"/*.yaml; do
    [[ -f "$f" ]] || continue
    base="$(basename "$f")"
    if [[ "$base" == "image-tag.yaml" ]]; then
      continue
    fi
    TAG="$tag" yq eval '
      with(.spec.jobTemplate.spec.template.spec.containers[0];
        .image = ((.image | split(":") | .[0]) + ":" + strenv(TAG))
      )
    ' "$f" >"$out_dir/$base"
  done
}
