locals {
  kms_data_key_reuse_period_seconds = var.kms_data_key_reuse_period_seconds == null ? 300 : var.kms_data_key_reuse_period_seconds
  redrive_policy                    = templatefile("${path.module}/redrive_policy.tftpl", { dlq = var.dead_letter_queue, mrc = var.max_receive_count })
}

resource "aws_sqs_queue" "queue" {
  name                              = "${var.name_prefix}-${var.name}${var.fifo_queue == true ? ".fifo" : ""}"
  redrive_policy                    = length(var.dead_letter_queue) > 0 ? local.redrive_policy : ""
  fifo_queue                        = var.fifo_queue
  delay_seconds                     = var.delay_seconds
  max_message_size                  = var.max_message_size
  visibility_timeout_seconds        = var.visibility_timeout_seconds
  message_retention_seconds         = var.message_retention_seconds
  receive_wait_time_seconds         = var.receive_wait_time_seconds
  content_based_deduplication       = var.content_based_deduplication
  kms_master_key_id                 = var.kms_master_key_id
  kms_data_key_reuse_period_seconds = local.kms_data_key_reuse_period_seconds
  tags = merge(
    var.common_tags,
    {
      "Name" = format("%v-%v", var.name_prefix, var.name)
    }
  )
}

data "aws_kms_key" "sqs_key" {
  count  = var.kms_master_key_id != null ? 1 : 0
  key_id = var.kms_master_key_id
}

module "sqs_iam_policies" {
  source      = "../iam/policies/sqs"
  name_prefix = var.name_prefix
  name        = var.name
  sqs_arn     = aws_sqs_queue.queue.arn
  kms_arn     = var.kms_master_key_id != null ? data.aws_kms_key.sqs_key[0].arn : null
}
