variable "env" {
  type = string
}

variable "logical_region_name" {
  type = string
}

variable "server_address" {
  type = string
}

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

variable "request_timeout_seconds" {
  type    = number
  default = 300
}

variable "poll_interval_seconds" {
  type    = number
  default = 10
}

variable "poll_timeout_seconds" {
  type    = number
  default = 1800
}

variable "max_sync_retries" {
  type    = number
  default = 3
}

data "external" "env_check" {
  program = ["bash", "-c", <<-EOT
        cat <<EOF
        {
            "auth_key": "$GLOBAL_AUTH_KEY"
        }
        EOF
    EOT
  ]

  lifecycle {
    postcondition {
      condition     = self.result.auth_key != ""
      error_message = "env GLOBAL_AUTH_KEY not set"
    }
  }
}

resource "null_resource" "this" {
  depends_on = [data.external.env_check]

  triggers = {
    env                     = var.env
    logical_region_name     = var.logical_region_name
    server_address          = var.server_address
    is_byoc                 = tostring(var.is_byoc)
    request_timeout_seconds = tostring(var.request_timeout_seconds)
    poll_interval_seconds   = tostring(var.poll_interval_seconds)
    poll_timeout_seconds    = tostring(var.poll_timeout_seconds)
    max_sync_retries        = tostring(var.max_sync_retries)
  }

  provisioner "local-exec" {
    when        = create
    interpreter = ["bash", "-c"]
    command     = <<-EOT
      set -euo pipefail
      uv run ${path.module}/scripts/register_regional_server.py         --mode register         --env ${self.triggers.env}         --logical-region-name ${self.triggers.logical_region_name}         --server-address '${self.triggers.server_address}'         --is-byoc ${self.triggers.is_byoc}         --request-timeout-seconds ${self.triggers.request_timeout_seconds}         --poll-interval-seconds ${self.triggers.poll_interval_seconds}         --poll-timeout-seconds ${self.triggers.poll_timeout_seconds}         --max-sync-retries ${self.triggers.max_sync_retries}
    EOT
  }

  provisioner "local-exec" {
    when        = destroy
    interpreter = ["bash", "-c"]
    command     = <<-EOT
      set -euo pipefail
      uv run ${path.module}/scripts/register_regional_server.py         --mode delete         --env ${self.triggers.env}         --logical-region-name ${self.triggers.logical_region_name}         --request-timeout-seconds ${lookup(self.triggers, "request_timeout_seconds", "300")}
    EOT
  }
}

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