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

resource "azurerm_resource_group" "rcp" {
  name     = var.rcp_resource_group
  location = var.cloud_region
  tags     = local.tags
}

resource "azurerm_virtual_network" "rcp" {
  name                = "${var.cluster_name}-vnet"
  address_space       = [var.rcp_vnet_cidr]
  resource_group_name = azurerm_resource_group.rcp.name
  location            = azurerm_resource_group.rcp.location
  tags                = local.tags
}

resource "azurerm_subnet" "rcp_nodes" {
  name                 = "${var.cluster_name}-nodes"
  address_prefixes     = [cidrsubnet(var.rcp_vnet_cidr, 4, 0)]
  virtual_network_name = azurerm_virtual_network.rcp.name
  resource_group_name  = azurerm_resource_group.rcp.name
}

resource "azurerm_subnet" "rcp_pe" {
  name                              = "${var.cluster_name}-pe"
  address_prefixes                  = [var.rcp_pe_subnet_cidr]
  virtual_network_name              = azurerm_virtual_network.rcp.name
  resource_group_name               = azurerm_resource_group.rcp.name
  private_endpoint_network_policies = "Disabled"
}

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

  cluster_name                        = var.cluster_name
  cloud_region                        = var.cloud_region
  resource_group_name                 = azurerm_resource_group.rcp.name
  create_resource_group               = false
  authorized_ip_ranges                = var.authorized_ip_ranges
  api_server_vnet_integration_enabled = var.api_server_vnet_integration_enabled
  api_server_subnet_cidr              = cidrsubnet(var.rcp_vnet_cidr, 8, 32)
  availability_zones                  = var.availability_zones
  admin_group_object_ids              = var.control_plane_admin_group_object_ids
  acr_id_scope                        = var.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
  vnet_id                             = azurerm_virtual_network.rcp.id
  vnet_name                           = azurerm_virtual_network.rcp.name
  subnet_id                           = azurerm_subnet.rcp_nodes.id
  subnet_name                         = azurerm_subnet.rcp_nodes.name
  tags                                = local.tags
}

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

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

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

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

module "region_registration" {
  depends_on = [azurerm_dns_a_record.kong_gateway_dns, module.dataplane_manager]
  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                   = "BYOC"
  dataplane_accounts             = [var.customer_subscription_id]
  audit_log_storage_account_name = var.audit_log_storage_account_name
  audit_log_bucket               = var.audit_log_bucket
  service_address                = var.service_address
}
