locals {
  tags = {
    environment = var.env
    servicetype = "premium"
  }
}

module "aks" {
  source = "../../modules/aks"

  cluster_name                        = local.cluster_name
  cloud_region                        = var.cloud_region
  authorized_ip_ranges                = var.authorized_ip_ranges
  api_server_vnet_integration_enabled = var.api_server_vnet_integration_enabled
  availability_zones                  = var.availability_zones
  admin_group_object_ids              = local.admin_group_object_ids
  acr_id_scope                        = local.effective_acr_id_scope
  nodepool_size                       = var.nodepool_size
  nodepool_autoscaling_enabled        = var.nodepool_autoscaling_enabled
  nodepool_min_size                   = var.nodepool_min_size
  nodepool_max_size                   = var.nodepool_max_size
  vm_size                             = var.vm_size
  k8s_version                         = var.k8s_version
  tags                                = local.tags
}

module "iam" {
  source = "./iam"

  env                      = var.env
  cloud_region             = var.cloud_region
  logical_region_name      = var.logical_region_name
  dataplane_accounts       = local.dataplane_accounts_contract_shape
  resource_group_name      = module.aks.resource_group_name
  oidc_issuer              = module.aks.oidc_issuer
  key_vault_id             = local.region_outputs.key_vault_id
  dns_zone_id              = data.azurerm_dns_zone.controlplane.id
  metering_container_scope = "${local.region_outputs.metering_storage_account_id}/blobServices/default/containers/${azurerm_storage_container.metering.name}"
  tags                     = local.tags

}

module "argocd_cluster" {
  source = "../../modules/argocd_cluster"

  env    = var.env
  name   = local.cluster_name
  server = module.aks.endpoint
  data   = module.aks.argocd_config
}

module "kubeconfig" {
  source     = "../../modules/kubeconfig"
  kubeconfig = module.aks.kubeconfig
  path       = "/tmp/${local.cluster_name}-kubeconfig"

  depends_on = [module.aks, module.argocd_cluster]
}

module "region_registration" {
  depends_on = [azurerm_dns_a_record.kong_gateway_dns]
  source     = "../../modules/global_registration"

  env                 = var.env
  cloud_provider      = "azure"
  cloud_region        = var.cloud_region
  logical_region_name = var.logical_region_name
  deploy_type         = "DEPLOY_TYPE_NEXTGEN"
  service_plan        = var.service_plan == "EssentialV2" ? "Essential" : var.service_plan
  dataplane_accounts  = local.shoot_subscriptions
  service_address     = local.service_address
}

output "cluster_name" {
  value = local.cluster_name
}

output "endpoint" {
  value = nonsensitive(module.aks.endpoint)
}

output "oidc_issuer" {
  value = module.aks.oidc_issuer
}

output "public_ips" {
  value = module.aks.public_ips
}

output "api_server_vnet_integration_enabled" {
  value = module.aks.api_server_vnet_integration_enabled
}

output "dataplane_subscriptions" {
  value = local.shoot_subscriptions
}
