#!/bin/bash

set -euo pipefail

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

source "$LIB_DIR/diff-lib.sh"
source "$WORKSPACE/common.sh"

parse_diff_args "$@"
ensure_kubeconfig_permissions

MERGED_VALUES_FILES=()

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

metrics_stats_env="$WORKSPACE/metrics-stats/envs/${ENV}-${VENDOR}-${LOGICAL_REGION}"
if [ -d "$metrics_stats_env" ]; then
	metrics_stats_image_tag="$(resolve_image_tag_file "$WORKSPACE/metrics-stats" "$ENV" "$VENDOR" "$LOGICAL_REGION")"
	metrics_stats_rendered="$(mktemp -d "${TMPDIR:-/tmp}/metrics-stats-diff-XXXXXX")"
	MERGED_VALUES_FILES+=("$metrics_stats_rendered")
	render_metrics_stats_manifests "$metrics_stats_env" "$metrics_stats_image_tag" "$metrics_stats_rendered"
	kubectl_diff "$metrics_stats_rendered" "Metrics Stats"
fi

diagnosis_query_env="$WORKSPACE/diagnosis-query/envs/${ENV}-${VENDOR}-${LOGICAL_REGION}"
if [ -f "$diagnosis_query_env/values.yaml" ]; then
	diagnosis_query_image_tag="$(resolve_image_tag_file "$WORKSPACE/diagnosis-query" "$ENV" "$VENDOR" "$LOGICAL_REGION")"
	if [ -f "$diagnosis_query_image_tag" ]; then
		values_file="$(merge_release_values "$diagnosis_query_env/values.yaml" "$diagnosis_query_image_tag")"
		MERGED_VALUES_FILES+=("$values_file")
		helm_diff "diagnosis-query" "$CHARTS/diagnosis-query" "$values_file" "observability" "Diagnosis Query"
	fi
fi

o11ydiagnosis_deltalake_env="$WORKSPACE/o11ydiagnosis-deltalake/envs/${ENV}-${VENDOR}-${LOGICAL_REGION}"
if [ -f "$o11ydiagnosis_deltalake_env/values.yaml" ]; then
	o11ydiagnosis_deltalake_image_tag="$(resolve_image_tag_file "$WORKSPACE/o11ydiagnosis-deltalake" "$ENV" "$VENDOR" "$LOGICAL_REGION")"
	if [ -f "$o11ydiagnosis_deltalake_image_tag" ]; then
		values_file="$(merge_release_values "$o11ydiagnosis_deltalake_env/values.yaml" "$o11ydiagnosis_deltalake_image_tag")"
		MERGED_VALUES_FILES+=("$values_file")
		helm_diff "o11ydiagnosis-deltalake" "$CHARTS/o11ydiagnosis-deltalake" "$values_file" "observability" "O11y Diagnosis Deltalake"
	fi
fi

o11ydiagnosis_logstats_env="$WORKSPACE/o11ydiagnosis-logstats/envs/${ENV}-${VENDOR}-${LOGICAL_REGION}"
if [ -f "$o11ydiagnosis_logstats_env/values.yaml" ]; then
	o11ydiagnosis_logstats_image_tag="$(resolve_image_tag_file "$WORKSPACE/o11ydiagnosis-logstats" "$ENV" "$VENDOR" "$LOGICAL_REGION")"
	if [ -f "$o11ydiagnosis_logstats_image_tag" ]; then
		values_file="$(merge_release_values "$o11ydiagnosis_logstats_env/values.yaml" "$o11ydiagnosis_logstats_image_tag")"
		MERGED_VALUES_FILES+=("$values_file")
		helm_diff "o11ydiagnosis-logstats" "$CHARTS/o11ydiagnosis-logstats" \
			"$values_file" "observability" "O11y Diagnosis Logstats"
	fi
fi

deltalake_ops_server_values="$WORKSPACE/deltalake-ops-server/envs/${ENV}-${VENDOR}-${LOGICAL_REGION}/values.yaml"
if [ -f "$deltalake_ops_server_values" ]; then
	helm_diff "deltalake-ops-server" "$CHARTS/deltalake-ops-server" \
		"$deltalake_ops_server_values" "observability" "Deltalake Ops Server"
fi

auth_server_values="$WORKSPACE/auth-server/envs/${ENV}-${VENDOR}-${LOGICAL_REGION}/values.yaml"
if [[ "$VENDOR" == "aws" && "$LOGICAL_REGION" == "us-west-2" && "$ENV" == "prod" ]] && [ -f "$auth_server_values" ]; then
	helm_diff "auth-server" "$CHARTS/auth-server" \
		"$auth_server_values" "observability-client" "Auth Server"
fi

metering_server_values="$WORKSPACE/metering-server/envs/${ENV}-${VENDOR}-${LOGICAL_REGION}/values.yaml"
if [[ "$ENV" == "prod" && ( "$VENDOR" == "aws" || "$VENDOR" == "gcp" || "$VENDOR" == "alicloud" ) ]] && [ -f "$metering_server_values" ]; then
	# The chart renders secret-templated config, so suppress secret values in CI diffs.
	helm_diff "metering-server" "$CHARTS/metering-server" \
		"$metering_server_values" "observability" "Metering Server" "" --suppress-secrets
fi


write_diff_summary
