#!/bin/bash
set -euo pipefail

# ----------------------
# 用户自定义变量
# ----------------------
type=$1
cluster_name="$2"
cluster_json=$(aliyun cs DescribeClustersV1 --name "$cluster_name" | jq -r '.clusters[0]')
cluster_id=$(echo "$cluster_json" | jq -r '.cluster_id // ""')
if [ -z $cluster_id ]; then
    echo "Failed query cluster"
    exit 1
fi

case $type in
ca)
    kube_config=$(aliyun cs DescribeClusterUserKubeconfig --ClusterId $cluster_id --PrivateIpAddress false | jq -r '.config')
    output=$(echo "$kube_config" | yq -r '.clusters[0].cluster.certificate-authority-data')
    ;;
endpoint)
    master_url=$(echo "$cluster_json" | jq -r '.master_url')
    output=$(echo "$master_url" | jq -r '.api_server_endpoint')
    ;;
argocd-config)
    kube_config=$(aliyun cs DescribeClusterUserKubeconfig --ClusterId $cluster_id --PrivateIpAddress false | jq -r '.config')
    ca=$(echo "$kube_config" | yq -r '.clusters[0].cluster.certificate-authority-data')
    cert=$(echo "$kube_config" | yq -r '.users[0].user.client-certificate-data')
    key=$(echo "$kube_config" | yq -r '.users[0].user.client-key-data')
    output=$(cat <<EOF
{
  "tlsClientConfig": {
    "insecure": false,
    "certData": "${cert}",
    "keyData": "${key}",
    "caData": "${ca}"
  }
}
EOF
)
    ;;
kubeconfig)
    output=$(aliyun cs DescribeClusterUserKubeconfig --ClusterId $cluster_id --PrivateIpAddress false | jq -r '.config')
    ;;
public-ip)
    vpc_id=$(echo "$cluster_json" | jq -r '.vpc_id')
    output=$(aliyun vpc DescribeNatGateways --VpcId $vpc_id \
      | jq -r '.NatGateways.NatGateway[].IpLists.IpList[].IpAddress')
    ;;
oidc-issuer)
    issuers=$(echo "$cluster_json" | jq -r '.rrsa_config.issuer')
    output=${issuers%%,*}
    ;;
*)
    echo "not supported info type"
    exit 1
    ;;
esac
if test $? -ne 0; then
    echo "Failed to get $type config for $cluster_name"
    exit 1
fi
echo "$output"
