# SQS queues ==================================================================

resource "aws_sqs_queue" "this" {
  for_each = var.queues

  name = local.queue_names[each.key]

  fifo_queue                  = each.value.fifo_queue
  content_based_deduplication = each.value.fifo_queue ? each.value.content_based_deduplication : null
  deduplication_scope         = each.value.fifo_queue ? each.value.deduplication_scope : null
  fifo_throughput_limit       = each.value.fifo_queue ? each.value.fifo_throughput_limit : null

  delay_seconds              = each.value.delay_seconds
  max_message_size           = each.value.max_message_size
  message_retention_seconds  = each.value.message_retention_seconds
  receive_wait_time_seconds  = each.value.receive_wait_time_seconds
  visibility_timeout_seconds = each.value.visibility_timeout_seconds

  kms_master_key_id                 = each.value.kms_master_key_id
  kms_data_key_reuse_period_seconds = each.value.kms_master_key_id != null ? each.value.kms_data_key_reuse_period_seconds : null
  # sqs_managed_sse_enabled must not be set when kms_master_key_id is set
  sqs_managed_sse_enabled = each.value.kms_master_key_id == null ? each.value.sqs_managed_sse_enabled : null

  redrive_policy = each.value.redrive_policy != null ? jsonencode({
    deadLetterTargetArn = aws_sqs_queue.this[each.value.redrive_policy.dead_letter_queue_key].arn
    maxReceiveCount     = each.value.redrive_policy.max_receive_count
  }) : null

  redrive_allow_policy = each.value.redrive_allow_policy != null ? jsonencode({
    redrivePermission = each.value.redrive_allow_policy.redrive_permission
    sourceQueueArns   = each.value.redrive_allow_policy.source_queue_arns
  }) : null

  tags = local.tags
}

# SQS queue policies ==========================================================

resource "aws_sqs_queue_policy" "this" {
  for_each = var.queue_policies

  queue_url = aws_sqs_queue.this[each.key].id
  policy    = each.value.policy
}
