terraform {
  required_version = ">= 1.17.1, < 2.0.0"
}

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

variable "old_readers" {
  type    = number
  default = 1
  validation {
    condition     = var.old_readers >= 0 && floor(var.old_readers) == var.old_readers
    error_message = "old_readers must be a nonnegative whole number."
  }
}

variable "old_writers" {
  type    = number
  default = 0
}

variable "backfill_remaining" {
  type    = number
  default = 0
}

# Built-in local state only. No cloud provider, provisioner, or remote backend.
resource "terraform_data" "compatibility_gate" {
  input = {
    phase            = var.contract_schema ? "contract" : "expand"
    old_readers      = var.old_readers
    old_writers      = var.old_writers
    backfill_pending = var.backfill_remaining
  }
  lifecycle {
    precondition {
      condition     = !var.contract_schema || (var.old_readers == 0 && var.old_writers == 0 && var.backfill_remaining == 0)
      error_message = "Keep the compatibility window open until old consumers are retired and backfill is complete."
    }
  }
}

output "reviewed_phase" {
  value = terraform_data.compatibility_gate.output
}
