variable "environment" {
  description = "The default environment for the SQS queue."
  default     = "dev"
}

variable "queue_name" {
  description = "The user defined queue name. Specify only one of var.custom_queue_name or var.queue_name"
  default     = ""
}

variable "custom_queue_name" {
  type        = string
  default     = ""
  description = "Custom queue name. This will override the programmatically generated name. Use sparingly. Specify only one of var.custom_queue_name or var.queue_name"
}

variable "application_family" {
  type        = string
  description = "Application family to which this service belongs"
}

variable "additional_tags" {
  type        = map(string)
  description = "Optional map of additional tags to set on resources. These will be combined with programmatically set required tags."
  default     = {}
}

variable "sqs_fifo_queue" {
  type        = bool
  description = "If set to `true` the order in which messages are sent and received is strictly preserved. Also sets value for content_based_deduplication."
  default     = false
}

variable "sqs_delay_seconds" {
  type        = number
  description = "Amount of time to delay the delivery of the message to the queue."
  default     = 10
}

variable "sqs_max_message_size" {
  type        = number
  description = "The minimum message size is 1 byte (1 character). The maximum is 262,144 bytes (256 KB)."
  default     = 2048
}

variable "sqs_message_retention_seconds" {
  type        = number
  description = "By default, a message is retained for 4 days. The minimum is 60 seconds (1 minute). The maximum is 1,209,600 seconds (14 days)."
  default     = 86400
}

variable "sqs_receive_wait_time_seconds" {
  type        = number
  description = "The duration (in seconds) for which the call waits for a message to arrive in the queue before returning."
  default     = 10
}

variable "sqs_deadletter_enabled" {
  type        = bool
  description = "Boolean that indicates if queue should be provisioned with a deadletter queue."
  default     = false
}

variable "sqs_visibility_timeout_seconds" {
  type        = number
  description = "The visibility timeout for the queue. An integer from 0 to 43200 (12 hours)."
  default     = 30
}

variable "deadletter_max_receive_count" {
  type        = number
  description = "Max number of messages that can be placed on the deadletter queue."
  default     = 4
}

variable "deadletter_delay_seconds" {
  type        = number
  description = "See sqs_delay_seconds."
  default     = 0
}

variable "deadletter_max_message_size" {
  type        = number
  description = "See sqs_max_message_size."
  default     = 0
}

variable "deadletter_message_retention_seconds" {
  type        = number
  description = "See sqs_message_retention_seconds."
  default     = 0
}

variable "deadletter_receive_wait_time_seconds" {
  type        = number
  description = "See sqs_receive_wait_time_seconds."
  default     = 0
}

variable "sqs_encryption_type" {
  type        = string
  description = "The type of encryption to use for the SQS queue. Valid values are 'sse-sqs' (SSE-SQS managed encryption) or 'kms' (KMS encryption). SSE-SQS is recommended when external services like Amazon Music need to publish messages."
  default     = "kms"

  validation {
    condition     = contains(["sse-sqs", "kms"], var.sqs_encryption_type)
    error_message = "sqs_encryption_type must be either 'sse-sqs' or 'kms'."
  }
}

variable "sqs_kms_master_key_id" {
  type        = string
  description = "The ID of an AWS-managed customer master key (CMK) for Amazon SQS or a custom CMK. Only used when sqs_encryption_type is 'kms'."
  default     = "alias/aws/sqs"
}

variable "sqs_kms_data_key_reuse_period_seconds" {
  type        = number
  description = "The length of time, in seconds, for which Amazon SQS can reuse a data key to encrypt or decrypt messages before calling AWS KMS again. Only used when sqs_encryption_type is 'kms'."
  default     = 300
}

locals {
  queue_name                        = var.custom_queue_name != "" ? var.custom_queue_name : var.sqs_fifo_queue ? "${var.environment}-${var.queue_name}-fifo-queue.fifo" : "${var.environment}-${var.queue_name}-queue"
  deadletter_queue_name             = var.custom_queue_name != "" ? "${var.custom_queue_name}-deadletter" : var.sqs_fifo_queue ? "${var.environment}-${var.queue_name}-fifo-deadletter.fifo" : "${var.environment}-${var.queue_name}-deadletter"
  sqs_minimal_policy_name           = var.custom_queue_name != "" ? "SQS-${var.custom_queue_name}-minimal-policy" : var.sqs_fifo_queue ? "SQS-${var.environment}-${var.queue_name}-fifo-minimal-policy" : "SQS-${var.environment}-${var.queue_name}-minimal-policy"
  sqs_deadetter_minimal_policy_name = var.custom_queue_name != "" ? "SQS-${var.custom_queue_name}-deadletter-minimal-policy" : var.sqs_fifo_queue ? "SQS-${var.environment}-${var.queue_name}-fifo-deadletter-minimal-policy" : "SQS-${var.environment}-${var.queue_name}-deadletter-minimal-policy"
}
