module "cluster-ng-service-crds" {
  source = "../../../modules/app"

  kubeconfig_path = module.kubeconfig.path
  workflow        = "deploy-new-region-cluster-ng-service-crds.yaml"
  parameters = {
    env               = var.env
    cloud             = "aws"
    region            = var.aws_region
    cluster           = module.argocd_cluster.name
    logicalRegionName = var.logical_region_name
  }
  check_before_destroy = false
  services = [
    {
      name     = "CustomResourceDefinition/dataplaneproviders.clusterserver.ng.tidbcloud.com"
      wait_for = "condition=Established"
    },
    {
      name     = "CustomResourceDefinition/sharedpools.clusterserver.ng.tidbcloud.com"
      wait_for = "condition=Established"
    },
    {
      name     = "CustomResourceDefinition/tasks.clusterserver.ng.tidbcloud.com"
      wait_for = "condition=Established"
    },
    {
      name     = "CustomResourceDefinition/tidbgroups.clusterserver.ng.tidbcloud.com"
      wait_for = "condition=Established"
    }
  ]
}

module "cluster-ng-server" {
  source     = "../../../modules/app"
  depends_on = [module.rds_db_cluster_service, module.o11y-agent-control-server]

  kubeconfig_path = module.kubeconfig.path
  workflow        = "deploy-new-region-cluster-ng-server.yaml"
  parameters = {
    env               = var.env
    cloud             = "aws"
    region            = var.aws_region
    cluster           = module.argocd_cluster.name
    logicalRegionName = var.logical_region_name
    imageRegistry     = "${local.seed_account}.dkr.ecr.us-west-2.amazonaws.com"
    args = jsonencode({
      image_registry            = "${local.seed_account}.dkr.ecr.us-west-2.amazonaws.com"
      irsa_role_arn             = module.iam-dataplane-manager.role_arn
      default_dataplane_account = var.dataplane_account
      pca_arn                   = var.pca_arn
      tidb_image_registry       = var.byoc_ecr
      enable_pca                = true
      metering_bucket           = aws_s3_bucket.metering.bucket
      # In BYOC, metering still runs on the control plane. Despite the
      # parameter name, enable_metering_worker_node controls that control-plane
      # metering component here, so no dataplane write-only role is needed.
      metering_writeonly_role_arn = ""
      metering_readwrite_role_arn = aws_iam_role.metering_read_write.arn
      metering_plan               = "byoc"
      enable_metering_worker_node = true
      is_byoc                     = true
      o11y_cluster_cidr           = var.o11y_vpc_cidr
      rds = {
        host                 = local.rds_resolved_endpoint
        port                 = 3306
        db                   = module.rds_db_cluster_service.database_name
        username             = module.rds_db_cluster_service.account_name
        password_secret_name = module.rds_db_cluster_service.password_secret_name
      }
    })
  }
  services = [
    {
      name      = "deploy/cluster-ng-server"
      namespace = "cluster-ng-service"
      wait_for  = "jsonpath='{.status.availableReplicas}'=REPLICAS"
    }
  ]
}
