variable "tag" {
  description = "The version of the nginx server to install"
  type        = string
  default     = "stable-alpine"
}

variable "wireguard_config" {
  description = "The Wireguard configuration file"
  type = object({
    private_key    = string
    public_key     = string
    pre_shared_key = string
    endpoint       = string
    endpoint_port  = number
    address        = string
    dns            = string
    allowed_ips    = list(string)
  })
  default   = null
  sensitive = true
}

variable "issuer_name" {
  description = "The name of the issuer to use for TLS certificates, internal certificates"
  type        = string
  default     = "internal-ca"
}

variable "services" {
  description = "A list of services to be deployed"
  type = map(object({
    fqdn                       = optional(list(string), [])
    custom_ingress_annotations = optional(map(string), {})
    annotations                = optional(map(string), {})
    upstream                   = optional(string, "")
    resolver                   = optional(string, "")
    default_headers            = optional(map(string), {}),
    http_port                  = optional(number, 80)
    https_port                 = optional(number, 443)
    tls                        = optional(bool, false)
    ingress                    = optional(bool, true)
    service_http_port          = optional(number, 80)
    service_https_port         = optional(number, 443)
    locations = optional(list(object({
      path     = string,
      headers  = optional(map(string), {}),
      private  = optional(bool, false),
      upstream = optional(string, ""),
      resolver = optional(string, "")
      rewrite  = optional(string, "")
    })), [])
    custom_snippet = optional(string, "")
    config         = optional(string, "")
  }))
}

variable "auth_token" {
  description = "The authentication token to use for the reverse proxy"
  type        = string
  sensitive   = true
  default     = ""
}

variable "streams" {
  description = "A list of streams to be deployed"
  type = map(object({
    port           = number
    upstream       = string
    custom_snippet = optional(string, "")
    resolver       = optional(string, "")
    upstream_port  = optional(number, null)
    protocol       = optional(string, "TCP")
    host_port      = optional(number, null)
  }))
  default = {}
}
