module "dataplane-manager" {
  source = "../../modules/app"

  kubeconfig_path = module.kubeconfig.path
  workflow        = "deploy-new-region-next-gen-dataplane-manager.yaml"
  parameters = {
    env               = var.env
    logicalRegionName = var.logical_region_name
    cluster           = module.argocd_cluster.name
    region            = var.aws_region
    cloud             = "aws"
    additionalArgs = jsonencode({
      awsIrsaRoleArn          = module.iam-dataplane-manager.role_arn
      defaultAwsDp4DrsRole    = "tidbcloud-dataplane-manager-assumed-role"
      eksServiceRoleName      = "tidbcloud-eks-service-role"
      nodeRoleName            = "tidbcloud-eks-node-role"
      availabilityZones       = local.availability_zone_names
      imageRegistry           = "${local.seed_account}.dkr.ecr.us-west-2.amazonaws.com"
      tidbImageRegistry       = "${local.seed_account}.dkr.ecr.us-west-2.amazonaws.com"
      dataplaneAccounts       = var.dataplane_accounts
      auth0Audience           = "${var.env}-proxy-service"
      auth0Domain             = var.env == "prod" ? "tidb.auth0.com" : "tidb-${var.env}.us.auth0.com"
      globalControlplaneIPs   = formatlist("%s/32", local.base_public_ips)
      regionalControlplaneIPs = formatlist("%s/32", local.eks.public_ips)
      o11yRegionalServiceIPs  = []
      clinicIPs               = formatlist("%s/32", local.clinic_outputs.public_ips.value)
      bastionIPs              = formatlist("%s/32", local.devops_outputs.public_ips.value)
      authorizedSubjects = concat(
        [module.iam-dataplane-manager.role_arn, local.devops_server_role_arn],
        [for acc in var.dataplane_accounts : "arn:aws:iam::${acc}:role/tidbcloud-dataplane-manager-assumed-role"],
      )
      publicHostedZoneDomain   = local.hosted_zone_name
      publicHostedZoneID       = local.hosted_zone_id
      pcaArn                   = local.pca_arn
      enableKongPlugin         = false
      dnsAccountId             = local.seed_account
      dnsManagerRoleArn        = module.iam-dataplane-manager.role_arn
      sliDeliveryStreamRoleArn = local.clinic_outputs.sli_delivery_stream_role_arn.value
    })
  }
  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"
    }
  ]
}
