#!/bin/bash

set -euo pipefail

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

# Source the shared diff library
source "$LIB_DIR/diff-lib.sh"

image_repository() {
	local image="$1"
	if [[ -z "$image" ]]; then
		echo ""
	elif [[ "$image" == *@sha256:* ]]; then
		echo "$image"
	elif [[ "${image##*/}" == *:* ]]; then
		echo "${image%:*}"
	else
		echo "$image"
	fi
}

image_tag() {
	local image="$1"
	if [[ -z "$image" || "$image" == *@sha256:* ]]; then
		echo ""
	elif [[ "${image##*/}" == *:* ]]; then
		echo "${image##*:}"
	else
		echo ""
	fi
}

deployment_image() {
	local deployment_name="$1"
	local container_name="$2"
	kubectl get deployment "$deployment_name" -n observability \
		-o "jsonpath={.spec.template.spec.containers[?(@.name==\"${container_name}\")].image}" 2>/dev/null || true
}

regional_server_component_diff() {
	local values_file="$REGIONAL_SERVER_ENV/values.yaml"
	local -a extra_args=()
	local regional_image
	local data_image
	local regional_repository
	local regional_tag
	local data_repository
	local data_tag

	if [[ ! -f "$values_file" ]]; then
		return
	fi

	regional_image="$(deployment_image "regionalserver" "regionalserver")"
	if [[ -n "$regional_image" ]]; then
		regional_repository="$(image_repository "$regional_image")"
		regional_tag="$(image_tag "$regional_image")"
		extra_args+=(
			--set "regionalServer.image.repository=${regional_repository}"
			--set "regionalServer.image.tag=${regional_tag}"
		)
	fi

	data_image="$(deployment_image "data-server" "data-server")"
	if [[ -n "$data_image" ]]; then
		data_repository="$(image_repository "$data_image")"
		data_tag="$(image_tag "$data_image")"
		extra_args+=(
			--set "dataServer.image.repository=${data_repository}"
			--set "dataServer.image.tag=${data_tag}"
		)
	fi

	helm_diff "regional-server" "$CHARTS/regional-server" "$values_file" "observability" "Regional Server" "" "${extra_args[@]}"
}

# Parse arguments
parse_diff_args "$@"

# Ensure kubeconfig permissions
ensure_kubeconfig_permissions

# Define paths for regional-server components
REGIONAL_SERVER_ENV="$WORKSPACE/regional-server/envs/${ENV}-${VENDOR}-${LOGICAL_REGION}"

regional_server_component_diff

# Write summary
write_diff_summary
