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

azure_cd_require() {
  local name="$1"
  if [[ -z "${!name:-}" ]]; then
    echo "Error: ${name} is required." >&2
    exit 1
  fi
}

azure_cd_login() {
  local is_byoc="${1:-false}"
  local client_id tenant_id subscription_id

  if [[ "${is_byoc}" == "true" ]]; then
    azure_cd_require AZURE_BYOC_DEPLOYMENT_CLIENT_ID
    azure_cd_require AZURE_BYOC_TENANT_ID
    azure_cd_require AZURE_BYOC_SUBSCRIPTION_ID
    client_id="${AZURE_BYOC_DEPLOYMENT_CLIENT_ID}"
    tenant_id="${AZURE_BYOC_TENANT_ID}"
    subscription_id="${AZURE_BYOC_SUBSCRIPTION_ID}"
  else
    azure_cd_require AZURE_STANDARD_CLIENT_ID
    azure_cd_require AZURE_STANDARD_TENANT_ID
    azure_cd_require AZURE_STANDARD_SUBSCRIPTION_ID
    client_id="${AZURE_STANDARD_CLIENT_ID}"
    tenant_id="${AZURE_STANDARD_TENANT_ID}"
    subscription_id="${AZURE_STANDARD_SUBSCRIPTION_ID}"
  fi

  azure_cd_require AZURE_FEDERATED_TOKEN_FILE
  local token
  token="$(cat "${AZURE_FEDERATED_TOKEN_FILE}")"

  az login --federated-token "${token}" --service-principal -u "${client_id}" -t "${tenant_id}"
  az account show
  az account set --subscription "${subscription_id}"
}

azure_cd_get_credentials() {
  local is_byoc="${1:-false}"
  local env_name="${2:-}"
  local cluster="${3:-}"
  local aks_name resource_group

  if [[ -z "${cluster}" ]]; then
    echo "Error: cluster is required." >&2
    exit 1
  fi

  if [[ "${is_byoc}" == "true" ]]; then
    aks_name="${cluster}"
    resource_group="${cluster}"
  else
    aks_name="${cluster}"
    if [[ "${env_name}" == "staging" && "${cluster}" == "o11y-staging-regional-eastus2" ]]; then
      resource_group="o11y-staging-eastus2"
    else
      resource_group="${cluster}"
    fi
  fi

  az aks get-credentials --resource-group "${resource_group}" --name "${aks_name}" --admin
}
