locals {
  regional_controlplane_ips = formatlist("%s/32", module.aks.public_ips)
  o11y_regional_service_ips = try(azurerm_private_endpoint.o11y.private_service_connection[0].private_ip_address, "") != "" ? ["${azurerm_private_endpoint.o11y.private_service_connection[0].private_ip_address}/32"] : []

  dataplane_manager_additional_args = merge(
    {
      awsIrsaRoleArn                       = module.aws_controlplane.crossplane_role_arn
      imageRegistry                        = var.image_registry
      tidbImageRegistry                    = var.customer_acr_login_server
      controlPlaneSubscriptionID           = var.pingcap_subscription_id
      controlPlaneCrossplaneProviderConfig = var.pingcap_subscription_id
      azureWorkloadIdentityClientID        = module.iam.dataplane_manager_client_id
      azureWorkloadIdentityTenantID        = var.pingcap_tenant_id
      dataplaneTenantID                    = var.customer_tenant_id
      hostedZoneTenantID                   = var.customer_tenant_id
      hostedZoneSubscriptionID             = var.customer_subscription_id
      hostedZoneResourceGroup              = var.tidb_cluster_dns_resource_group
      publicHostedZoneDomain               = var.tidb_cluster_dns_domain
      dataplaneAccounts                    = var.dataplane_accounts_contract_shape
      auth0Audience                        = var.auth0_audience
      auth0Domain                          = var.auth0_domain
      globalControlplaneIPs                = var.global_controlplane_ips
      regionalControlplaneIPs              = local.regional_controlplane_ips
      clinicIPs                            = var.clinic_ips
      resourceNamePrefix                   = "tidbcloud"
      enableKongPublicAccess               = false
      enableKongPlugin                     = true
      acrResourceGroup                     = var.customer_acr_resource_group
      adminGroupObjectIDs                  = var.dataplane_admin_group_object_ids
      customerACRResourceID                = var.customer_acr_resource_id
      customerACRLoginServer               = var.customer_acr_login_server
      byoc = {
        privateLink = {
          controlPlaneVPCID         = azurerm_virtual_network.rcp.id
          controlPlaneSubnetIDs     = [azurerm_subnet.rcp_pe.id]
          controlPlaneResourceGroup = azurerm_resource_group.rcp.name
        }
        aksControlPlaneIdentityName         = var.aks_control_plane_identity_name
        aksKubeletIdentityName              = var.aks_kubelet_identity_name
        aksManagedIdentityResourceGroupName = var.aks_managed_identity_resource_group
        azureAPIServerDNSZone               = local.apiserver_dns_zone_contract
        azureGatewayDNSZone                 = local.gateway_dns_zone_contract
      }
    },
    length(var.availability_zones) > 0 ? {
      availabilityZones = var.availability_zones
    } : {},
    length(local.o11y_regional_service_ips) > 0 ? {
      o11yRegionalServiceIPs = local.o11y_regional_service_ips
    } : {},
    length(var.bastion_ips) > 0 ? {
      bastionIPs = var.bastion_ips
    } : {}
  )
}

module "dataplane_manager" {
  depends_on = [module.upbound_aws_provider, module.upbound_azure_provider, module.kube_prometheus, module.victoria_metrics_operator, module.kong_ingress_controller]
  source     = "../../../modules/app"

  kubeconfig_path = module.kubeconfig.path
  workflow        = "deploy-new-region-next-gen-dataplane-manager.yaml"
  parameters = {
    cloud             = "azure"
    env               = var.env
    region            = var.cloud_region
    logicalRegionName = var.logical_region_name
    cluster           = module.argocd_cluster.name
    additionalArgs    = jsonencode(local.dataplane_manager_additional_args)
  }
  services = [
    {
      name      = "deploy/dataplane-controller"
      namespace = "dataplane-manager"
      wait_for  = "jsonpath='{.status.availableReplicas}'=REPLICAS"
    },
    {
      name      = "deploy/dataplane-server"
      namespace = "dataplane-manager"
      wait_for  = "jsonpath='{.status.availableReplicas}'=REPLICAS"
    }
  ]
}
