#!/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"

# Parse arguments
parse_diff_args "$@"

# Ensure kubeconfig permissions
ensure_kubeconfig_permissions

# =============================================================================
# Cloud-Addon Components Diff
# =============================================================================

if [[ "$VENDOR" == "aws" ]]; then
	aws_lb_values="$WORKSPACE/aws-lb-controller/envs/${ENV}-${VENDOR}-${LOGICAL_REGION}/values.yaml"
	if [ -f "$aws_lb_values" ]; then
		helm_diff "aws-load-balancer-controller" "$CHARTS/aws-load-balancer-controller" \
			"$aws_lb_values" "kube-system" "AWS Load Balancer Controller"
	fi

	external_dns_values="$WORKSPACE/external-dns/envs/${ENV}-${VENDOR}-${LOGICAL_REGION}/values.yaml"
	if [ -f "$external_dns_values" ]; then
		helm_diff "external-dns" "$CHARTS/external-dns" \
			"$external_dns_values" "kube-system" "External DNS"
	fi

	helm repo add autoscaler https://kubernetes.github.io/autoscaler >/dev/null 2>&1 || true
	helm repo update autoscaler >/dev/null 2>&1
	cluster_autoscaler_values="$WORKSPACE/cluster-autoscaler/envs/${ENV}-${VENDOR}-${LOGICAL_REGION}/values.yaml"
	if [ -f "$cluster_autoscaler_values" ]; then
		helm_diff "cluster-autoscaler" "autoscaler/cluster-autoscaler" \
			"$cluster_autoscaler_values" "kube-system" "Cluster Autoscaler" "9.46.6"
	fi
fi

ingress_write_env="$WORKSPACE/ingress-nginx-write/envs/${ENV}-${VENDOR}-${LOGICAL_REGION}"
if [ -d "$ingress_write_env" ]; then
	ingress_write_values="$ingress_write_env/values.yaml"
	if [ -f "$ingress_write_values" ]; then
		helm_diff "ingress-nginx-write" "$CHARTS/ingress-nginx-v411" \
			"$ingress_write_values" "kube-system" "Ingress NGINX Write"
	fi
fi

LEGACY_RELEASE_NAME_READ="ingress-nginx"
RELEASE_NAME_READ="ingress-nginx-read"
NGINX_READ_CHART_PATH="$CHARTS/ingress-nginx-v411"
LEGACY_CHART_PATH="$CHARTS/ingress-nginx"
NAMESPACE="kube-system"

LEGACYLIST=("us-west-2" "us-east-1" "eu-central-1" "us-west-2" "ap-northeast-1" "ap-northeast-2" "ap-south-1" "ap-southeast-1" "ap-southeast-3" "asia-east1" "asia-east2" "asia-northeast1" "asia-southeast1" "us-central1" "us-east4" "us-west1")

# Note: the new regions deployed by the auto-deploy script is using "ingress-nginx-read" as the release name

if [[ " ${LEGACYLIST[*]} " =~ " ${LOGICAL_REGION} " && $ENV != "dev" && $VENDOR != "alicloud" ]]; then
  RELEASE_NAME_READ=$LEGACY_RELEASE_NAME_READ
  NGINX_READ_CHART_PATH=$LEGACY_CHART_PATH
fi

if [[ $VENDOR == "azure" ]]; then
  NAMESPACE="observability"
fi

# Ingress NGINX Read
ingress_read_env="$WORKSPACE/ingress-nginx-read/envs/${ENV}-${VENDOR}-${LOGICAL_REGION}"
if [ -d "$ingress_read_env" ]; then
	ingress_read_values="$ingress_read_env/values.yaml"
	if [ -f "$ingress_read_values" ]; then
		helm_diff "$RELEASE_NAME_READ" "$NGINX_READ_CHART_PATH" \
			"$ingress_read_values" "$NAMESPACE" "Ingress NGINX Read"
	fi
fi

# Alicloud-specific manifests
# if [[ "$VENDOR" == "alicloud" ]]; then
# 	# ALB Config
# 	if [ -f "$ingress_write_env/albconfig.yaml" ]; then
# 		kubectl_diff "$ingress_write_env/albconfig.yaml" "Ingress Write ALB Config"
# 	fi
# 	if [ -f "$ingress_read_env/albconfig.yaml" ]; then
# 		kubectl_diff "$ingress_read_env/albconfig.yaml" "Ingress Read ALB Config"
# 	fi

# 	# Private keys
# 	if [ -f "$ingress_write_env/privatekey.yaml" ]; then
# 		kubectl_diff "$ingress_write_env/privatekey.yaml" "Ingress Write Private Key"
# 	fi
# 	if [ -f "$ingress_read_env/privatekey.yaml" ]; then
# 		kubectl_diff "$ingress_read_env/privatekey.yaml" "Ingress Read Private Key"
# 	fi

# 	# Dataplane ingress
# 	if [ -f "$ingress_read_env/dataplane_ingress.yaml" ]; then
# 		kubectl_diff "$ingress_read_env/dataplane_ingress.yaml" "Dataplane Ingress"
# 	fi
# fi

# Write summary
write_diff_summary
