data "aws_caller_identity" "current" {}

locals {
  o11y_name      = "o11y-${var.env}-${var.logical_region_name}"
  aws_account_id = data.aws_caller_identity.current.account_id
  zone_name      = module.vpc.private_subnet_objects[0].availability_zone
  states = {
    "base" : "aws/base/${var.env}.json",
    "devops" : var.env == "dev" ? "aws/devops/staging.json" : "aws/devops/${var.env}.json",
    "argocd" : "gke/argocd/${var.env}.json",
    "runner" : "gke/runner/prod.json",
  }
}

data "aws_s3_object" "states" {
  for_each = local.states
  bucket   = "autonomous-deployment-terraform-state"
  key      = each.value

  provider = aws.tf_state
}

locals {
  base_outputs   = jsondecode(data.aws_s3_object.states["base"].body).outputs
  devops_outputs = jsondecode(data.aws_s3_object.states["devops"].body).outputs
  argocd_outputs = jsondecode(data.aws_s3_object.states["argocd"].body).outputs
  runner_outputs = jsondecode(data.aws_s3_object.states["runner"].body).outputs
  public_access_cidrs = var.env == "dev" ? ["0.0.0.0/0"] : concat(
    formatlist("%s/32", local.base_outputs.public_ips.value),
    formatlist("%s/32", local.devops_outputs.public_ips.value),
    formatlist("%s/32", local.argocd_outputs.public_ips.value),
    formatlist("%s/32", local.runner_outputs.public_ips.value),
  )
}

module "kubeconfig" {
  source     = "../../../modules/kubeconfig"
  kubeconfig = local.eks.kubeconfig
  path       = "/tmp/${local.eks.name}-kubeconfig"

  depends_on = [module.eks, module.vpc]
}