variable "env" {
  type = string
}

variable "logical_region_name" {
  type = string
}

variable "server_address" {
  type = string
}

variable "is_byoc" {
  type    = bool
  default = false
}

resource "null_resource" "this" {
  triggers = {
    env                 = var.env
    server_address      = var.server_address
    logical_region_name = var.logical_region_name
  }

  provisioner "local-exec" {
    when        = create
    interpreter = ["bash", "-c"]
    command     = <<-EOT
      set -euo pipefail
      payload=$(jq -n \
        --arg logicalRegion "${self.triggers.logical_region_name}" \
        --arg serverAddress "${self.triggers.server_address}" \
        --argjson isByoc ${jsonencode(var.is_byoc)} \
        '{logicalRegion: $logicalRegion, serverAddress: $serverAddress, isByoc: $isByoc}')
      curl -fsS -X POST -H "Content-Type: application/json" -H "Authorization: Basic $GLOBAL_AUTH_KEY" \
        https://inner-central.${self.triggers.env}.tidbcloud.com/inner/config-center/cluster-types/LOGICAL_CLUSTER/regional-servers \
        -d "$payload" | tee /tmp/response.json
      jq -e --arg serverAddress "${self.triggers.server_address}" '.serverAddress == $serverAddress' /tmp/response.json
      curl -fsS -X POST -H "Content-Type: application/json" -H "Authorization: Basic $GLOBAL_AUTH_KEY" \
        https://inner-central.${self.triggers.env}.tidbcloud.com/inner/config-center/cluster-types/SHARED_POOL/regional-servers \
        -d "$payload" | tee /tmp/response.json
      jq -e --arg serverAddress "${self.triggers.server_address}" '.serverAddress == $serverAddress' /tmp/response.json
    EOT
  }

  provisioner "local-exec" {
    when        = destroy
    interpreter = ["bash", "-c"]
    command     = <<-EOT
      set -euo pipefail
      curl -fsS -X DELETE -H "Authorization: Basic $GLOBAL_AUTH_KEY" \
        https://inner-central.${self.triggers.env}.tidbcloud.com/inner/config-center/cluster-types/LOGICAL_CLUSTER/regional-servers/${self.triggers.logical_region_name}
      curl -fsS -X DELETE -H "Authorization: Basic $GLOBAL_AUTH_KEY" \
        https://inner-central.${self.triggers.env}.tidbcloud.com/inner/config-center/cluster-types/SHARED_POOL/regional-servers/${self.triggers.logical_region_name}
    EOT
  }
}

output "id" {
  value = null_resource.this.id
}
