#!/bin/bash
set -o pipefail

type=$1
k8sName=$2
region=$3
profile=$4
shift 4

case $type in
  oidc-issuer)
    output=$(aws eks describe-cluster \
      --name=$k8sName \
      --query="cluster.identity.oidc.issuer" \
      --profile=$profile --region=$region  --output=text --no-cli-pager)
    ;;
  endpoint)
    output=$(aws eks describe-cluster \
      --name=$k8sName \
      --query="cluster.endpoint" \
      --profile=$profile --region=$region  --output=text --no-cli-pager)
    ;;
  version)
    output=$(aws eks describe-cluster \
      --name=$k8sName \
      --query="cluster.version" \
      --profile=$profile --region=$region  --output=text --no-cli-pager)
    ;;
  ca)
    output=$(aws eks describe-cluster \
      --name=$k8sName \
      --query="cluster.certificateAuthority.data" \
      --profile=$profile --region=$region  --output=text --no-cli-pager)
    ;;
  arn)
    output=$(aws eks describe-cluster \
      --name=$k8sName \
      --query="cluster.arn" \
      --profile=$profile --region=$region  --output=text --no-cli-pager)
    ;;
  service-role-arn)
    output=$(aws eks describe-cluster \
      --name=$k8sName \
      --query="cluster.roleArn" \
      --profile=$profile --region=$region  --output=text --no-cli-pager)
    ;;
  public-ip)
    output=$(aws ec2 describe-addresses \
      --query "Addresses[?Tags[?Key=='alpha.eksctl.io/cluster-name' && Value=='$k8sName']].{PublicIp:PublicIp}" \
      --profile=$profile --region=$region  --output=text --no-cli-pager)
    ;;
  vpc)
    output=$(aws cloudformation describe-stack-resource \
      --stack=eksctl-$k8sName-cluster --logical-resource-id=VPC \
      --query="StackResourceDetail.PhysicalResourceId" \
      --profile=$profile --region=$region  --output=text --no-cli-pager)
    ;;
  private-subnets)
    output=$(aws cloudformation describe-stacks \
      --stack-name eksctl-$k8sName-cluster \
      --query='Stacks[0].Outputs[?OutputKey == `SubnetsPrivate`].OutputValue' \
      --profile=$profile --region=$region  --output=text --no-cli-pager)
    ;;
  public-subnets)
    output=$(aws cloudformation describe-stacks \
      --stack-name eksctl-$k8sName-cluster \
      --query='Stacks[0].Outputs[?OutputKey == `SubnetsPublic`].OutputValue' \
      --profile=$profile --region=$region  --output=text --no-cli-pager)
    ;;
  kube-config)
    cd=$(pwd)
    path="$cd/$k8sName.$region.yaml"
    truncate --size 0 $path # clear old result
    eksctl utils write-kubeconfig --cluster $k8sName --kubeconfig "$path" --region $region --profile=$profile
    output=$path
    ;;
  *)
    echo "not supported info type"
    exit 1
    ;;
esac
if test $? -ne 0; then
    echo "Failed to get $type config for $k8sName"
    exit 1
fi
echo "$output"
