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

if [ "$#" -lt 6 ]; then
  echo "usage: $0 <release> <chart> <namespace> <kubeconfig> <context> <artifact-image-or-empty> [values-file...]" >&2
  exit 2
fi

release=$1
chart=$2
namespace=$3
kubeconfig=$4
context=$5
artifact_image=$6
shift 6

helm_args=(template "$release" "$chart" --namespace "$namespace" --include-crds)
for values_file in "$@"; do
  helm_args+=(--values "$values_file")
done

if [ -n "$artifact_image" ]; then
  repository=
  tag=
  digest=
  case "$artifact_image" in
    *@*)
      repository=${artifact_image%@*}
      digest=${artifact_image#*@}
      ;;
    *)
      repository=${artifact_image%:*}
      tag=${artifact_image##*:}
      if [ "$repository" = "$artifact_image" ] || [ -z "$tag" ] || [ "${repository##*/}" = "$repository" ]; then
        echo "owner artifact image must be tagged or digested for $release" >&2
        exit 2
      fi
      ;;
  esac
  if [ -z "$repository" ] || { [ -z "$tag" ] && [ -z "$digest" ]; }; then
    echo "owner artifact image is invalid for $release" >&2
    exit 2
  fi
  helm_args+=(
    --set-string "image.repository=$repository"
    --set-string "image.tag=$tag"
    --set-string "image.digest=$digest"
  )
fi

if [ "${CP9_RENDER_ONLY:-false}" = "true" ]; then
  KUBECONFIG="$kubeconfig" helm "${helm_args[@]}"
  exit 0
fi

KUBECONFIG="$kubeconfig" helm "${helm_args[@]}" |
  kubectl --kubeconfig "$kubeconfig" --context "$context" apply --server-side --force-conflicts -f -
