locals {
  hosted_zone_name = var.env == "prod" ? "observability.tidbcloud.com" : "observability-${var.env}.pingcap.cloud"
  ds_address       = "www.ds.${var.logical_region_name}.alicloud.${local.hosted_zone_name}"
  rs_address       = "www.rs.${var.logical_region_name}.alicloud.${local.hosted_zone_name}"
}

data "aws_route53_zone" "this" {
  name = local.hosted_zone_name
}

data "kubernetes_resource" "alb_rs" {
  depends_on  = [module.o11y-regional-server-cd]
  api_version = "alibabacloud.com/v1"
  kind        = "AlbConfig"
  metadata {
    name = "alb-rs"
  }

  lifecycle {
    postcondition {
      condition     = self.object.status == null || can(self.object.status.loadBalancer.dnsname)
      error_message = "can't get dns name for alb-rs"
    }
  }
}

data "kubernetes_resource" "alb_ds" {
  depends_on  = [module.o11y-regional-server-cd]
  api_version = "alibabacloud.com/v1"
  kind        = "AlbConfig"
  metadata {
    name = "alb-ds"
  }

  lifecycle {
    postcondition {
      condition     = self.object.status == null || can(self.object.status.loadBalancer.dnsname)
      error_message = "can't get dns name for alb-ds"
    }
  }
}

resource "aws_route53_record" "alb-rs" {
  zone_id = data.aws_route53_zone.this.zone_id
  name    = local.rs_address
  type    = "CNAME"
  records = [data.kubernetes_resource.alb_rs.object.status.loadBalancer.dnsname]
  ttl     = 300
}

resource "aws_route53_record" "alb-ds" {
  zone_id = data.aws_route53_zone.this.zone_id
  name    = local.ds_address
  type    = "CNAME"
  records = [data.kubernetes_resource.alb_ds.object.status.loadBalancer.dnsname]
  ttl     = 300
}

module "register-region-global" {
  source     = "../../modules/app"
  depends_on = [module.o11y-regional-server-cd]

  workflow = "new-region-global.yaml"
  gh_repo  = "tidbcloud/observability"
  gh_ref   = "main"
  parameters = {
    vendor            = "alicloud"
    region            = var.cloud_region
    logicalRegionName = var.logical_region_name
    env               = var.env
    cluster           = local.cluster_name
    args = jsonencode({
      rsAddress = local.rs_address
      dsAddress = local.ds_address
    })
  }
  wait_workflow_success = true
  finalizer = {
    workflow = "destroy-region-global.yaml"
    parameters = {
      vendor            = "alicloud"
      region            = var.cloud_region
      logicalRegionName = var.logical_region_name
      env               = var.env
    }
  }
}

module "global-server-cd" {
  depends_on = [module.register-region-global]
  source     = "../../modules/app"

  kubeconfig_path = module.kubeconfig.path
  workflow        = "global-server-cd.yaml"
  gh_repo         = "tidbcloud/observability"
  gh_ref          = "main"
  parameters = {
    env     = var.env
    git-ref = "main"
  }
  wait_workflow_success = true
}

module "o11y-infra-cd-global" {
  depends_on = [module.global-server-cd]
  source     = "../../modules/app"

  kubeconfig_path = module.kubeconfig.path
  workflow        = "infra-cd-v2.yaml"
  gh_repo         = "tidbcloud/observability"
  gh_ref          = "main"
  parameters = {
    vendor  = "global"
    region  = "us-west-2"
    env     = var.env
    git-ref = "main"
  }
  wait_workflow_success = true
}
