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                        = local.image_registry
      controlPlaneSubscriptionID           = local.controlplane_subscription
      azureWorkloadIdentityClientID        = module.iam.dataplane_manager_client_id
      azureWorkloadIdentityTenantID        = local.controlplane_tenant_id
      hostedZoneResourceGroup              = local.hosted_zone_resource_group
      publicHostedZoneDomain               = local.public_hosted_zone_domain
      dataplaneAccounts                    = local.dataplane_accounts_contract_shape
      auth0Audience                        = local.auth0_audience
      auth0Domain                          = local.auth0_domain
      globalControlplaneIPs                = local.global_controlplane_ips
      regionalControlplaneIPs              = local.regional_controlplane_ips
      clinicIPs                            = local.clinic_ips
      controlPlaneCrossplaneProviderConfig = local.control_plane_crossplane_provider_config
    },
    local.tidb_image_registry != "" ? {
      tidbImageRegistry = local.tidb_image_registry
    } : {},
    length(var.availability_zones) > 0 ? {
      availabilityZones = var.availability_zones
    } : {},
    length(local.o11y_regional_service_ips) > 0 ? {
      o11yRegionalServiceIPs = local.o11y_regional_service_ips
    } : {},
    length(local.bastion_ips) > 0 ? {
      bastionIPs = local.bastion_ips
    } : {},
    {
      enableKongPublicAccess = var.env == "dev"
      resourceNamePrefix     = "tidbcloud"
    },
    local.effective_acr_rg != "" ? {
      acrResourceGroup = local.effective_acr_rg
    } : {},
    length(local.admin_group_object_ids) > 0 ? {
      adminGroupObjectIDs = local.admin_group_object_ids
    } : {},
    try(local.base_outputs.pca_arn.value, "") != "" ? {
      pcaArn = local.base_outputs.pca_arn.value
    } : {}
  )
}

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"
    }
  ]
}
