module "vendor_image_caching_sqs" {
  source = "../../../modules/sqs/"

  name_prefix                = local.name_prefix
  name                       = "vendor-image-caching"
  visibility_timeout_seconds = "900"
  message_retention_seconds  = "20700"
  receive_wait_time_seconds  = "0"
  kms_master_key_id          = data.aws_kms_key.default_sqs_key.id

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Portal",
      service                  = "SQS",
      plat_env_project_service = "${local.aggregated_tag}_PRL_SQS"
    }
  )
}

module "track_visit_queue" {
  source = "../../../modules/sqs/"

  name_prefix                = local.name_prefix
  name                       = "track_visit"
  visibility_timeout_seconds = "120"
  receive_wait_time_seconds  = "0"
  kms_master_key_id          = data.aws_kms_key.default_sqs_key.id

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Portal",
      service                  = "SQS",
      plat_env_project_service = "${local.aggregated_tag}_PRL_SQS"
    }
  )
}

module "notifications_queue" {
  source = "../../../modules/sqs"

  name_prefix       = local.name_prefix
  name              = "notifications"
  kms_master_key_id = data.aws_kms_key.default_sqs_key.id

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Portal",
      service                  = "SQS",
      plat_env_project_service = "${local.aggregated_tag}_PRL_SQS"
    }
  )
}

module "push_messages_dead_letter_queue" {
  source = "../../../modules/sqs"

  name_prefix       = local.name_prefix
  name              = "push-messages-errors"
  kms_master_key_id = data.aws_kms_key.default_sqs_key.id

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Portal",
      service                  = "SQS",
      plat_env_project_service = "${local.aggregated_tag}_PRL_SQS"
    }
  )
}

module "push_messages_queue" {
  source = "../../../modules/sqs"

  name_prefix       = local.name_prefix
  name              = "push-messages"
  kms_master_key_id = data.aws_kms_key.default_sqs_key.id
  dead_letter_queue = module.push_messages_dead_letter_queue.queue.arn
  max_receive_count = 3

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Portal",
      service                  = "SQS",
      plat_env_project_service = "${local.aggregated_tag}_PRL_SQS"
    }
  )
}

resource "aws_sqs_queue_policy" "push_messages_queue_policy" {
  queue_url = module.push_messages_queue.queue.id

  policy = <<POLICY
{
   "Version": "2012-10-17",
   "Id": "AllowSNSPublish",
   "Statement": [{
      "Effect": "Allow",
      "Principal": {
         "Service": [
            "sns.amazonaws.com"
         ]
      },
      "Action": "sqs:SendMessage",
      "Resource": "${module.push_messages_queue.queue.arn}",
      "Condition": {
        "ArnEquals": {
          "aws:SourceArn": "${module.push_messages_sns_topic.topic.arn}"
        }
      }
   },{
      "Effect": "Allow",
      "Principal": {
         "Service": [
            "sns.amazonaws.com"
         ]
      },
      "Action": "sqs:SendMessage",
      "Resource": "${module.push_messages_queue.queue.arn}",
      "Condition": {
        "ArnEquals": {
          "aws:SourceArn": "${module.messages_sns_topic.topic.arn}"
        }
      }
   }]
}
POLICY
}

module "push_messages_receipts_queue" {
  source = "../../../modules/sqs"

  name_prefix       = local.name_prefix
  name              = "push-messages-receipts"
  kms_master_key_id = data.aws_kms_key.default_sqs_key.id

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Portal",
      service                  = "SQS",
      plat_env_project_service = "${local.aggregated_tag}_PRL_SQS"
    }
  )
}

module "push_notifications_dlq" {
  source = "../../../modules/sqs/"

  name_prefix       = local.name_prefix
  name              = "push_notifications_dlq"
  kms_master_key_id = data.aws_kms_key.default_sqs_key.id

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Portal",
      service                  = "SQS",
      plat_env_project_service = "${local.aggregated_tag}_PRL_SQS"
    }
  )
}

module "push_notifications_queue" {
  source = "../../../modules/sqs/"

  name_prefix                = local.name_prefix
  name                       = "push_notifications"
  visibility_timeout_seconds = "360"
  dead_letter_queue          = module.push_notifications_dlq.queue.arn
  max_receive_count          = 50
  kms_master_key_id          = data.aws_kms_key.default_sqs_key.id

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Portal",
      service                  = "SQS",
      plat_env_project_service = "${local.aggregated_tag}_PRL_SQS"
    }
  )
}

// charts entry messages sqs

module "charts_entry_messages_event_bus_queue" {
  source = "../../../modules/sqs/"

  name_prefix                = local.name_prefix
  name                       = "charts_entry_messages"
  kms_master_key_id          = data.aws_kms_key.default_sqs_key.key_id
  visibility_timeout_seconds = "900"
  dead_letter_queue          = module.charts_entry_messages_event_bus_dlq.queue.arn
  max_receive_count          = 1

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Portal",
      service                  = "SQS",
      plat_env_project_service = "${local.aggregated_tag}_PRL_SQS"
    }
  )
}

data "aws_iam_policy_document" "charts_entry_messages_event_bus_policy" {
  version = "2012-10-17"

  statement {
    sid    = "AllowSNSPublish"
    effect = "Allow"
    principals {
      identifiers = ["sns.amazonaws.com"]
      type        = "Service"
    }
    actions = ["sqs:SendMessage"]
    condition {
      test     = "ArnLike"
      variable = "aws:SourceArn"
      values = [
        module.messages_sns_topic.topic.arn
      ]
    }
    resources = [
      module.charts_entry_messages_event_bus_queue.queue.arn
    ]
  }

  statement {
    actions = [
      "sqs:SendMessage",
      "sqs:SendMessageBatch",
      "sqs:PurgeQueue",
    ]
    condition {
      test     = "ArnLike"
      variable = "aws:SourceArn"
      values = [
        aws_cloudwatch_event_rule.charts_messages_rule.arn
      ]
    }
    effect = "Allow"
    principals {
      type        = "Service"
      identifiers = ["events.amazonaws.com"]
    }
    resources = [
      module.charts_entry_messages_event_bus_queue.queue.arn
    ]
    sid = "Queue permissions"
  }
}

resource "aws_sqs_queue_policy" "charts_entry_messages_event_bus_policy" {
  queue_url = module.charts_entry_messages_event_bus_queue.queue.id
  policy    = data.aws_iam_policy_document.charts_entry_messages_event_bus_policy.json
}

module "charts_entry_messages_event_bus_dlq" {
  source = "../../../modules/sqs/"

  name_prefix       = local.name_prefix
  name              = "charts_entry_messages_dlq"
  kms_master_key_id = data.aws_kms_key.default_sqs_key.key_id

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Portal",
      service                  = "SQS",
      plat_env_project_service = "${local.aggregated_tag}_PRL_SQS"
    }
  )
}

data "aws_iam_policy_document" "charts_entry_messages_event_bus_dlq_policy" {
  version = "2012-10-17"

  statement {
    actions = [
      "sqs:SendMessage",
      "sqs:SendMessageBatch",
      "sqs:PurgeQueue",
    ]
    condition {
      test     = "ArnLike"
      variable = "aws:SourceArn"
      values = [
        aws_cloudwatch_event_rule.charts_messages_rule.arn
      ]
    }
    effect = "Allow"
    principals {
      type        = "Service"
      identifiers = ["events.amazonaws.com"]
    }
    resources = [
      module.charts_entry_messages_event_bus_dlq.queue.arn
    ]
    sid = "Dead-letter queue permissions"
  }
}

resource "aws_sqs_queue_policy" "charts_entry_messages_event_bus_dlq_policy" {
  queue_url = module.charts_entry_messages_event_bus_dlq.queue.id
  policy    = data.aws_iam_policy_document.charts_entry_messages_event_bus_dlq_policy.json
}

// charts exit messages sqs

module "charts_exit_messages_event_bus_queue" {
  source = "../../../modules/sqs/"

  name_prefix                = local.name_prefix
  name                       = "charts_exit_messages"
  kms_master_key_id          = data.aws_kms_key.default_sqs_key.key_id
  visibility_timeout_seconds = "900"
  dead_letter_queue          = module.charts_exit_messages_event_bus_dlq.queue.arn
  max_receive_count          = 1

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Portal",
      service                  = "SQS",
      plat_env_project_service = "${local.aggregated_tag}_PRL_SQS"
    }
  )
}

data "aws_iam_policy_document" "charts_exit_messages_event_bus_policy" {
  version = "2012-10-17"

  statement {
    sid    = "AllowSNSPublish"
    effect = "Allow"
    principals {
      identifiers = ["sns.amazonaws.com"]
      type        = "Service"
    }
    actions = ["sqs:SendMessage"]
    condition {
      test     = "ArnLike"
      variable = "aws:SourceArn"
      values = [
        module.messages_sns_topic.topic.arn
      ]
    }
    resources = [
      module.charts_exit_messages_event_bus_queue.queue.arn
    ]
  }

  statement {
    actions = [
      "sqs:SendMessage",
      "sqs:SendMessageBatch",
      "sqs:PurgeQueue",
    ]
    condition {
      test     = "ArnLike"
      variable = "aws:SourceArn"
      values = [
        aws_cloudwatch_event_rule.charts_messages_rule.arn
      ]
    }
    effect = "Allow"
    principals {
      type        = "Service"
      identifiers = ["events.amazonaws.com"]
    }
    resources = [
      module.charts_exit_messages_event_bus_queue.queue.arn
    ]
    sid = "Queue permissions"
  }
}

resource "aws_sqs_queue_policy" "charts_exit_messages_event_bus_policy" {
  queue_url = module.charts_exit_messages_event_bus_queue.queue.id
  policy    = data.aws_iam_policy_document.charts_exit_messages_event_bus_policy.json
}

module "charts_exit_messages_event_bus_dlq" {
  source = "../../../modules/sqs/"

  name_prefix       = local.name_prefix
  name              = "charts_exit_messages_dlq"
  kms_master_key_id = data.aws_kms_key.default_sqs_key.key_id

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Portal",
      service                  = "SQS",
      plat_env_project_service = "${local.aggregated_tag}_PRL_SQS"
    }
  )
}

data "aws_iam_policy_document" "charts_exit_messages_event_bus_dlq_policy" {
  version = "2012-10-17"

  statement {
    actions = [
      "sqs:SendMessage",
      "sqs:SendMessageBatch",
      "sqs:PurgeQueue",
    ]
    condition {
      test     = "ArnLike"
      variable = "aws:SourceArn"
      values = [
        aws_cloudwatch_event_rule.charts_messages_rule.arn
      ]
    }
    effect = "Allow"
    principals {
      type        = "Service"
      identifiers = ["events.amazonaws.com"]
    }
    resources = [
      module.charts_exit_messages_event_bus_dlq.queue.arn
    ]
    sid = "Dead-letter queue permissions"
  }
}

resource "aws_sqs_queue_policy" "charts_exit_messages_event_bus_dlq_policy" {
  queue_url = module.charts_exit_messages_event_bus_dlq.queue.id
  policy    = data.aws_iam_policy_document.charts_exit_messages_event_bus_dlq_policy.json
}

// charts move messages sqs

module "charts_move_messages_event_bus_queue" {
  source = "../../../modules/sqs/"

  name_prefix                = local.name_prefix
  name                       = "charts_move_messages"
  kms_master_key_id          = data.aws_kms_key.default_sqs_key.key_id
  visibility_timeout_seconds = "900"
  dead_letter_queue          = module.charts_move_messages_event_bus_dlq.queue.arn
  max_receive_count          = 1

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Portal",
      service                  = "SQS",
      plat_env_project_service = "${local.aggregated_tag}_PRL_SQS"
    }
  )
}

data "aws_iam_policy_document" "charts_move_messages_event_bus_policy" {
  version = "2012-10-17"

  statement {
    sid    = "AllowSNSPublish"
    effect = "Allow"
    principals {
      identifiers = ["sns.amazonaws.com"]
      type        = "Service"
    }
    actions = ["sqs:SendMessage"]
    condition {
      test     = "ArnLike"
      variable = "aws:SourceArn"
      values = [
        module.messages_sns_topic.topic.arn
      ]
    }
    resources = [
      module.charts_move_messages_event_bus_queue.queue.arn
    ]
  }

  statement {
    actions = [
      "sqs:SendMessage",
      "sqs:SendMessageBatch",
      "sqs:PurgeQueue",
    ]
    condition {
      test     = "ArnLike"
      variable = "aws:SourceArn"
      values = [
        aws_cloudwatch_event_rule.charts_messages_rule.arn
      ]
    }
    effect = "Allow"
    principals {
      type        = "Service"
      identifiers = ["events.amazonaws.com"]
    }
    resources = [
      module.charts_move_messages_event_bus_queue.queue.arn
    ]
    sid = "Queue permissions"
  }
}

resource "aws_sqs_queue_policy" "charts_move_messages_event_bus_policy" {
  queue_url = module.charts_move_messages_event_bus_queue.queue.id
  policy    = data.aws_iam_policy_document.charts_move_messages_event_bus_policy.json
}

module "charts_move_messages_event_bus_dlq" {
  source = "../../../modules/sqs/"

  name_prefix       = local.name_prefix
  name              = "charts_move_messages_dlq"
  kms_master_key_id = data.aws_kms_key.default_sqs_key.key_id

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Portal",
      service                  = "SQS",
      plat_env_project_service = "${local.aggregated_tag}_PRL_SQS"
    }
  )
}

data "aws_iam_policy_document" "charts_move_messages_event_bus_dlq_policy" {
  version = "2012-10-17"

  statement {
    actions = [
      "sqs:SendMessage",
      "sqs:SendMessageBatch",
      "sqs:PurgeQueue",
    ]
    condition {
      test     = "ArnLike"
      variable = "aws:SourceArn"
      values = [
        aws_cloudwatch_event_rule.charts_messages_rule.arn
      ]
    }
    effect = "Allow"
    principals {
      type        = "Service"
      identifiers = ["events.amazonaws.com"]
    }
    resources = [
      module.charts_move_messages_event_bus_dlq.queue.arn
    ]
    sid = "Dead-letter queue permissions"
  }
}

resource "aws_sqs_queue_policy" "charts_move_messages_event_bus_dlq_policy" {
  queue_url = module.charts_move_messages_event_bus_dlq.queue.id
  policy    = data.aws_iam_policy_document.charts_move_messages_event_bus_dlq_policy.json
}

// charts tracklist update messages sqs

module "charts_tracklist_update_messages_event_bus_queue" {
  source = "../../../modules/sqs/"

  name_prefix                = local.name_prefix
  name                       = "charts_tracklist_update_messages"
  kms_master_key_id          = data.aws_kms_key.default_sqs_key.key_id
  visibility_timeout_seconds = "900"
  dead_letter_queue          = module.charts_tracklist_update_messages_event_bus_dlq.queue.arn
  max_receive_count          = 5

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Portal",
      service                  = "SQS",
      plat_env_project_service = "${local.aggregated_tag}_PRL_SQS"
    }
  )
}

data "aws_iam_policy_document" "charts_tracklist_update_messages_event_bus_policy" {
  version = "2012-10-17"

  statement {
    sid    = "AllowSNSPublish"
    effect = "Allow"
    principals {
      identifiers = ["sns.amazonaws.com"]
      type        = "Service"
    }
    actions = ["sqs:SendMessage"]
    condition {
      test     = "ArnLike"
      variable = "aws:SourceArn"
      values = [
        module.messages_sns_topic.topic.arn
      ]
    }
    resources = [
      module.charts_tracklist_update_messages_event_bus_queue.queue.arn
    ]
  }

  statement {
    actions = [
      "sqs:SendMessage",
      "sqs:SendMessageBatch",
      "sqs:PurgeQueue",
    ]
    condition {
      test     = "ArnLike"
      variable = "aws:SourceArn"
      values = [
        aws_cloudwatch_event_rule.charts_messages_rule.arn
      ]
    }
    effect = "Allow"
    principals {
      type        = "Service"
      identifiers = ["events.amazonaws.com"]
    }
    resources = [
      module.charts_tracklist_update_messages_event_bus_queue.queue.arn
    ]
    sid = "Queue permissions"
  }
}

resource "aws_sqs_queue_policy" "charts_tracklist_update_messages_event_bus_policy" {
  queue_url = module.charts_tracklist_update_messages_event_bus_queue.queue.id
  policy    = data.aws_iam_policy_document.charts_tracklist_update_messages_event_bus_policy.json
}

module "charts_tracklist_update_messages_event_bus_dlq" {
  source = "../../../modules/sqs/"

  name_prefix       = local.name_prefix
  name              = "charts_tracklist_update_messages_dlq"
  kms_master_key_id = data.aws_kms_key.default_sqs_key.key_id

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Portal",
      service                  = "SQS",
      plat_env_project_service = "${local.aggregated_tag}_PRL_SQS"
    }
  )
}

data "aws_iam_policy_document" "charts_tracklist_update_messages_event_bus_dlq_policy" {
  version = "2012-10-17"

  statement {
    actions = [
      "sqs:SendMessage",
      "sqs:SendMessageBatch",
      "sqs:PurgeQueue",
    ]
    condition {
      test     = "ArnLike"
      variable = "aws:SourceArn"
      values = [
        aws_cloudwatch_event_rule.charts_messages_rule.arn
      ]
    }
    effect = "Allow"
    principals {
      type        = "Service"
      identifiers = ["events.amazonaws.com"]
    }
    resources = [
      module.charts_tracklist_update_messages_event_bus_dlq.queue.arn
    ]
    sid = "Dead-letter queue permissions"
  }
}

resource "aws_sqs_queue_policy" "charts_tracklist_update_messages_event_bus_dlq_policy" {
  queue_url = module.charts_tracklist_update_messages_event_bus_dlq.queue.id
  policy    = data.aws_iam_policy_document.charts_tracklist_update_messages_event_bus_dlq_policy.json
}

// charts feed messages

module "charts_feed_messages_event_bus_queue" {
  source = "../../../modules/sqs/"

  name_prefix                = local.name_prefix
  name                       = "charts_feed_messages"
  kms_master_key_id          = data.aws_kms_key.default_sqs_key.key_id
  visibility_timeout_seconds = "900"
  dead_letter_queue          = module.charts_feed_messages_event_bus_dlq.queue.arn

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Portal",
      service                  = "SQS",
      plat_env_project_service = "${local.aggregated_tag}_PRL_SQS"
    }
  )
}

data "aws_iam_policy_document" "charts_feed_messages_event_bus_policy" {
  version = "2012-10-17"

  statement {
    sid    = "AllowSNSPublish"
    effect = "Allow"
    principals {
      identifiers = ["sns.amazonaws.com"]
      type        = "Service"
    }
    actions = ["sqs:SendMessage"]
    condition {
      test     = "ArnLike"
      variable = "aws:SourceArn"
      values = [
        module.messages_sns_topic.topic.arn
      ]
    }
    resources = [
      module.charts_feed_messages_event_bus_queue.queue.arn
    ]
  }

  statement {
    actions = [
      "sqs:SendMessage",
      "sqs:SendMessageBatch",
      "sqs:PurgeQueue",
    ]
    condition {
      test     = "ArnLike"
      variable = "aws:SourceArn"
      values = [
        aws_cloudwatch_event_rule.charts_feed_messages_rule.arn
      ]
    }
    effect = "Allow"
    principals {
      type        = "Service"
      identifiers = ["events.amazonaws.com"]
    }
    resources = [
      module.charts_feed_messages_event_bus_queue.queue.arn
    ]
    sid = "Queue permissions"
  }
}

resource "aws_sqs_queue_policy" "charts_feed_messages_event_bus_policy" {
  queue_url = module.charts_feed_messages_event_bus_queue.queue.id
  policy    = data.aws_iam_policy_document.charts_feed_messages_event_bus_policy.json
}

module "charts_feed_messages_event_bus_dlq" {
  source = "../../../modules/sqs/"

  name_prefix       = local.name_prefix
  name              = "charts_feed_messages_dlq"
  kms_master_key_id = data.aws_kms_key.default_sqs_key.key_id

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Portal",
      service                  = "SQS",
      plat_env_project_service = "${local.aggregated_tag}_PRL_SQS"
    }
  )
}

data "aws_iam_policy_document" "charts_feed_messages_event_bus_dlq_policy" {
  version = "2012-10-17"

  statement {
    actions = [
      "sqs:SendMessage",
      "sqs:SendMessageBatch",
      "sqs:PurgeQueue",
    ]
    condition {
      test     = "ArnLike"
      variable = "aws:SourceArn"
      values = [
        aws_cloudwatch_event_rule.charts_feed_messages_rule.arn
      ]
    }
    effect = "Allow"
    principals {
      type        = "Service"
      identifiers = ["events.amazonaws.com"]
    }
    resources = [
      module.charts_feed_messages_event_bus_dlq.queue.arn
    ]
    sid = "Dead-letter queue permissions"
  }
}

resource "aws_sqs_queue_policy" "charts_feed_messages_event_bus_dlq_policy" {
  queue_url = module.charts_feed_messages_event_bus_dlq.queue.id
  policy    = data.aws_iam_policy_document.charts_feed_messages_event_bus_dlq_policy.json
}

// charts push messages

module "charts_push_messages_event_bus_queue" {
  source = "../../../modules/sqs/"

  name_prefix                = local.name_prefix
  name                       = "charts_push_messages"
  kms_master_key_id          = data.aws_kms_key.default_sqs_key.key_id
  visibility_timeout_seconds = "900"
  dead_letter_queue          = module.charts_push_messages_event_bus_dlq.queue.arn

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Portal",
      service                  = "SQS",
      plat_env_project_service = "${local.aggregated_tag}_PRL_SQS"
    }
  )
}

data "aws_iam_policy_document" "charts_push_messages_event_bus_policy" {
  version = "2012-10-17"

  statement {
    sid    = "AllowSNSPublish"
    effect = "Allow"
    principals {
      identifiers = ["sns.amazonaws.com"]
      type        = "Service"
    }
    actions = ["sqs:SendMessage"]
    condition {
      test     = "ArnLike"
      variable = "aws:SourceArn"
      values = [
        module.messages_sns_topic.topic.arn
      ]
    }
    resources = [
      module.charts_push_messages_event_bus_queue.queue.arn
    ]
  }

  statement {
    actions = [
      "sqs:SendMessage",
      "sqs:SendMessageBatch",
      "sqs:PurgeQueue",
    ]
    condition {
      test     = "ArnLike"
      variable = "aws:SourceArn"
      values = [
        aws_cloudwatch_event_rule.charts_push_messages_rule.arn
      ]
    }
    effect = "Allow"
    principals {
      type        = "Service"
      identifiers = ["events.amazonaws.com"]
    }
    resources = [
      module.charts_push_messages_event_bus_queue.queue.arn
    ]
    sid = "Queue permissions"
  }
}

resource "aws_sqs_queue_policy" "charts_push_messages_event_bus_policy" {
  queue_url = module.charts_push_messages_event_bus_queue.queue.id
  policy    = data.aws_iam_policy_document.charts_push_messages_event_bus_policy.json
}

module "charts_push_messages_event_bus_dlq" {
  source = "../../../modules/sqs/"

  name_prefix       = local.name_prefix
  name              = "charts_push_messages_dlq"
  kms_master_key_id = data.aws_kms_key.default_sqs_key.key_id

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Portal",
      service                  = "SQS",
      plat_env_project_service = "${local.aggregated_tag}_PRL_SQS"
    }
  )
}

data "aws_iam_policy_document" "charts_push_messages_event_bus_dlq_policy" {
  version = "2012-10-17"

  statement {
    actions = [
      "sqs:SendMessage",
      "sqs:SendMessageBatch",
      "sqs:PurgeQueue",
    ]
    condition {
      test     = "ArnLike"
      variable = "aws:SourceArn"
      values = [
        aws_cloudwatch_event_rule.charts_push_messages_rule.arn
      ]
    }
    effect = "Allow"
    principals {
      type        = "Service"
      identifiers = ["events.amazonaws.com"]
    }
    resources = [
      module.charts_push_messages_event_bus_dlq.queue.arn
    ]
    sid = "Dead-letter queue permissions"
  }
}

resource "aws_sqs_queue_policy" "charts_push_messages_event_bus_dlq_policy" {
  queue_url = module.charts_push_messages_event_bus_dlq.queue.id
  policy    = data.aws_iam_policy_document.charts_push_messages_event_bus_dlq_policy.json
}

// juno updated

module "juno_updated_event_bus_queue" {
  source = "../../../modules/sqs/"

  name_prefix                = local.name_prefix
  name                       = "juno_updated"
  kms_master_key_id          = data.aws_kms_key.default_sqs_key.key_id
  message_retention_seconds  = 43200
  visibility_timeout_seconds = "900"
  dead_letter_queue          = module.juno_updated_event_bus_dlq.queue.arn

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Portal",
      service                  = "SQS",
      plat_env_project_service = "${local.aggregated_tag}_PRL_SQS"
    }
  )
}

data "aws_iam_policy_document" "juno_updated_event_bus_policy" {
  version = "2012-10-17"

  statement {
    sid    = "AllowSNSPublish"
    effect = "Allow"
    principals {
      identifiers = ["sns.amazonaws.com"]
      type        = "Service"
    }
    actions = ["sqs:SendMessage"]
    condition {
      test     = "ArnLike"
      variable = "aws:SourceArn"
      values = [
        module.messages_sns_topic.topic.arn
      ]
    }
    resources = [
      module.juno_updated_event_bus_queue.queue.arn
    ]
  }

  statement {
    actions = [
      "sqs:SendMessage",
      "sqs:SendMessageBatch",
      "sqs:PurgeQueue",
    ]
    condition {
      test     = "ArnLike"
      variable = "aws:SourceArn"
      values = [
        aws_cloudwatch_event_rule.juno_updated_messages_rule.arn
      ]
    }
    effect = "Allow"
    principals {
      type        = "Service"
      identifiers = ["events.amazonaws.com"]
    }
    resources = [
      module.juno_updated_event_bus_queue.queue.arn
    ]
    sid = "Queue permissions"
  }
}

resource "aws_sqs_queue_policy" "juno_updated_event_bus_policy" {
  queue_url = module.juno_updated_event_bus_queue.queue.id
  policy    = data.aws_iam_policy_document.juno_updated_event_bus_policy.json
}

module "juno_updated_event_bus_dlq" {
  source = "../../../modules/sqs/"

  name_prefix       = local.name_prefix
  name              = "juno_updated_dlq"
  kms_master_key_id = data.aws_kms_key.default_sqs_key.key_id

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Portal",
      service                  = "SQS",
      plat_env_project_service = "${local.aggregated_tag}_PRL_SQS"
    }
  )
}

data "aws_iam_policy_document" "juno_updated_event_bus_dlq_policy" {
  version = "2012-10-17"

  statement {
    actions = [
      "sqs:SendMessage",
      "sqs:SendMessageBatch",
      "sqs:PurgeQueue",
    ]
    condition {
      test     = "ArnLike"
      variable = "aws:SourceArn"
      values = [
        aws_cloudwatch_event_rule.juno_updated_messages_rule.arn
      ]
    }
    effect = "Allow"
    principals {
      type        = "Service"
      identifiers = ["events.amazonaws.com"]
    }
    resources = [
      module.juno_updated_event_bus_dlq.queue.arn
    ]
    sid = "Dead-letter queue permissions"
  }
}

resource "aws_sqs_queue_policy" "juno_updated_event_bus_dlq_policy" {
  queue_url = module.juno_updated_event_bus_dlq.queue.id
  policy    = data.aws_iam_policy_document.juno_updated_event_bus_dlq_policy.json
}

// juno digest

module "juno_filter_notifications_event_bus_queue" {
  source = "../../../modules/sqs/"

  name_prefix                = local.name_prefix
  name                       = "juno_filter_notifications"
  kms_master_key_id          = data.aws_kms_key.default_sqs_key.key_id
  visibility_timeout_seconds = "900"
  message_retention_seconds  = 43200
  dead_letter_queue          = module.juno_filter_notifications_event_bus_dlq.queue.arn

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Portal",
      service                  = "SQS",
      plat_env_project_service = "${local.aggregated_tag}_PRL_SQS"
    }
  )
}

data "aws_iam_policy_document" "juno_filter_notifications_event_bus_policy" {
  version = "2012-10-17"

  statement {
    sid    = "AllowSNSPublish"
    effect = "Allow"
    principals {
      identifiers = ["sns.amazonaws.com"]
      type        = "Service"
    }
    actions = ["sqs:SendMessage"]
    condition {
      test     = "ArnLike"
      variable = "aws:SourceArn"
      values = [
        module.messages_sns_topic.topic.arn
      ]
    }
    resources = [
      module.juno_filter_notifications_event_bus_queue.queue.arn
    ]
  }

  statement {
    actions = [
      "sqs:SendMessage",
      "sqs:SendMessageBatch",
      "sqs:PurgeQueue",
    ]
    condition {
      test     = "ArnLike"
      variable = "aws:SourceArn"
      values = [
        aws_cloudwatch_event_rule.juno_filter_notifications_rule.arn
      ]
    }
    effect = "Allow"
    principals {
      type        = "Service"
      identifiers = ["events.amazonaws.com"]
    }
    resources = [
      module.juno_filter_notifications_event_bus_queue.queue.arn
    ]
    sid = "Queue permissions"
  }
}

resource "aws_sqs_queue_policy" "juno_filter_notifications_event_bus_policy" {
  queue_url = module.juno_filter_notifications_event_bus_queue.queue.id
  policy    = data.aws_iam_policy_document.juno_filter_notifications_event_bus_policy.json
}

module "juno_filter_notifications_event_bus_dlq" {
  source = "../../../modules/sqs/"

  name_prefix       = local.name_prefix
  name              = "juno_filter_notificatios_dlq"
  kms_master_key_id = data.aws_kms_key.default_sqs_key.key_id

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Portal",
      service                  = "SQS",
      plat_env_project_service = "${local.aggregated_tag}_PRL_SQS"
    }
  )
}

data "aws_iam_policy_document" "juno_filter_notifications_event_bus_dlq_policy" {
  version = "2012-10-17"

  statement {
    actions = [
      "sqs:SendMessage",
      "sqs:SendMessageBatch",
      "sqs:PurgeQueue",
    ]
    condition {
      test     = "ArnLike"
      variable = "aws:SourceArn"
      values = [
        aws_cloudwatch_event_rule.juno_filter_notifications_rule.arn
      ]
    }
    effect = "Allow"
    principals {
      type        = "Service"
      identifiers = ["events.amazonaws.com"]
    }
    resources = [
      module.juno_filter_notifications_event_bus_dlq.queue.arn
    ]
    sid = "Dead-letter queue permissions"
  }
}

resource "aws_sqs_queue_policy" "juno_filter_notifications_event_bus_dlq_policy" {
  queue_url = module.juno_filter_notifications_event_bus_dlq.queue.id
  policy    = data.aws_iam_policy_document.juno_filter_notifications_event_bus_dlq_policy.json
}

data "aws_sns_topic" "delphi_notification_stage" {
  provider = aws.gdb-delphi-dev
  name     = "stage-delphi-notification"
}

data "aws_sns_topic" "delphi_notification_prod" {
  provider = aws.gdb-delphi-prod
  name     = "prod-delphi-notification"
}

data "aws_iam_policy_document" "delphi_notification_queue_policy" {
  version = "2012-10-17"

  statement {
    actions = [
      "sqs:SendMessage"
    ]
    condition {
      test     = "ArnLike"
      variable = "aws:SourceArn"
      values = [
        data.aws_sns_topic.delphi_notification_prod.arn,
      ]
    }
    effect = "Allow"
    principals {
      type        = "Service"
      identifiers = ["sns.amazonaws.com"]
    }
    resources = [
      aws_sqs_queue.delphi_notification_queue.arn,
    ]
    sid = "${local.name_prefix}-sns-send-prod"
  }
}

data "aws_iam_policy_document" "delphi_notification_queue_stage_policy" {
  version = "2012-10-17"

  statement {
    actions = [
      "sqs:SendMessage"
    ]
    condition {
      test     = "ArnLike"
      variable = "aws:SourceArn"
      values = [
        data.aws_sns_topic.delphi_notification_stage.arn
      ]
    }
    effect = "Allow"
    principals {
      type        = "Service"
      identifiers = ["sns.amazonaws.com"]
    }
    resources = [
      aws_sqs_queue.delphi_notification_queue_stage.arn,
    ]
    sid = "${local.name_prefix}-sns-send-stage"
  }
}

resource "aws_sqs_queue_policy" "delphi_notification_queue" {
  queue_url = aws_sqs_queue.delphi_notification_queue.id
  policy    = data.aws_iam_policy_document.delphi_notification_queue_policy.json
}

resource "aws_sqs_queue_policy" "delphi_notification_queue_stage" {
  queue_url = aws_sqs_queue.delphi_notification_queue_stage.id
  policy    = data.aws_iam_policy_document.delphi_notification_queue_stage_policy.json
}

resource "aws_sqs_queue" "delphi_notification_queue" {
  name              = "${local.name_prefix}-delphi-notification"
  kms_master_key_id = data.aws_kms_key.default_sqs_key.id

  tags = merge(
    local.common_tags,
    {
      project                  = "Portal",
      service                  = "SQS",
      plat_env_project_service = "${local.aggregated_tag}_PRL_SQS"
    }
  )
}

resource "aws_sqs_queue" "delphi_notification_queue_stage" {
  name              = "${local.name_prefix}-delphi-notification-stage"
  kms_master_key_id = data.aws_kms_key.default_sqs_key.id

  tags = merge(
    local.common_tags,
    {
      project                  = "Portal",
      service                  = "SQS",
      plat_env_project_service = "${local.aggregated_tag}_PRL_SQS"
    }
  )
}

resource "aws_sns_topic_subscription" "delphi_notification_queue" {
  topic_arn = data.aws_sns_topic.delphi_notification_prod.arn
  protocol  = "sqs"
  endpoint  = aws_sqs_queue.delphi_notification_queue.arn
}

resource "aws_sns_topic_subscription" "delphi_notification_queue_stage" {
  topic_arn = data.aws_sns_topic.delphi_notification_stage.arn
  protocol  = "sqs"
  endpoint  = aws_sqs_queue.delphi_notification_queue_stage.arn
}

module "sqs_delphi_notification_iam_policies" {
  source      = "../../../modules/iam/policies/sqs"
  name_prefix = local.name_prefix
  name        = "delphi-notification"
  sqs_arn     = aws_sqs_queue.delphi_notification_queue.arn
  kms_arn     = data.aws_kms_key.default_sqs_key.arn
}

module "sqs_delphi_notification_stage_iam_policies" {
  source      = "../../../modules/iam/policies/sqs"
  name_prefix = local.name_prefix
  name        = "delphi-notification-stage"
  sqs_arn     = aws_sqs_queue.delphi_notification_queue_stage.arn
  kms_arn     = data.aws_kms_key.default_sqs_key.arn
}

// playlists messages entry

module "playlists_messages_entry_dlq" {
  source = "../../../modules/sqs/"

  name_prefix       = local.name_prefix
  name              = "playlists_messages_entry_dlq"
  kms_master_key_id = data.aws_kms_key.default_sqs_key.key_id

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Portal",
      service                  = "SQS",
      plat_env_project_service = "${local.aggregated_tag}_PRL_SQS"
    }
  )
}

module "playlists_messages_entry_queue" {
  source = "../../../modules/sqs/"

  name_prefix                = local.name_prefix
  name                       = "playlists_messages_entry"
  kms_master_key_id          = data.aws_kms_key.default_sqs_key.key_id
  visibility_timeout_seconds = "300"
  dead_letter_queue          = module.playlists_messages_entry_dlq.queue.arn
  max_receive_count          = 1

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Portal",
      service                  = "SQS",
      plat_env_project_service = "${local.aggregated_tag}_PRL_SQS"
    }
  )
}

data "aws_iam_policy_document" "playlists_messages_entry_policy" {
  version = "2012-10-17"

  statement {
    sid    = "AllowSNSPublish"
    effect = "Allow"
    principals {
      identifiers = ["sns.amazonaws.com"]
      type        = "Service"
    }
    actions = ["sqs:SendMessage"]
    condition {
      test     = "ArnLike"
      variable = "aws:SourceArn"
      values = [
        module.messages_sns_topic.topic.arn
      ]
    }
    resources = [
      module.playlists_messages_entry_queue.queue.arn
    ]
  }

  statement {
    actions = [
      "sqs:SendMessage",
      "sqs:SendMessageBatch",
      "sqs:PurgeQueue",
    ]
    condition {
      test     = "ArnLike"
      variable = "aws:SourceArn"
      values = [
        aws_cloudwatch_event_rule.charts_messages_rule.arn
      ]
    }
    effect = "Allow"
    principals {
      type        = "Service"
      identifiers = ["events.amazonaws.com"]
    }
    resources = [
      module.playlists_messages_entry_queue.queue.arn
    ]
    sid = "Queue permissions"
  }
}

resource "aws_sqs_queue_policy" "playlists_messages_entry_policy" {
  queue_url = module.playlists_messages_entry_queue.queue.id
  policy    = data.aws_iam_policy_document.playlists_messages_entry_policy.json
}

// playlists messages update

module "playlists_messages_update_dlq" {
  source = "../../../modules/sqs/"

  name_prefix       = local.name_prefix
  name              = "playlists_messages_update_dlq"
  kms_master_key_id = data.aws_kms_key.default_sqs_key.key_id

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Portal",
      service                  = "SQS",
      plat_env_project_service = "${local.aggregated_tag}_PRL_SQS"
    }
  )
}

module "playlists_messages_update_queue" {
  source = "../../../modules/sqs/"

  name_prefix                = local.name_prefix
  name                       = "playlists_messages_update"
  kms_master_key_id          = data.aws_kms_key.default_sqs_key.key_id
  visibility_timeout_seconds = "300"
  dead_letter_queue          = module.playlists_messages_update_dlq.queue.arn
  max_receive_count          = 1

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Portal",
      service                  = "SQS",
      plat_env_project_service = "${local.aggregated_tag}_PRL_SQS"
    }
  )
}

data "aws_iam_policy_document" "playlists_messages_update_policy" {
  version = "2012-10-17"

  statement {
    sid    = "AllowSNSPublish"
    effect = "Allow"
    principals {
      identifiers = ["sns.amazonaws.com"]
      type        = "Service"
    }
    actions = ["sqs:SendMessage"]
    condition {
      test     = "ArnLike"
      variable = "aws:SourceArn"
      values = [
        module.messages_sns_topic.topic.arn
      ]
    }
    resources = [
      module.playlists_messages_update_queue.queue.arn
    ]
  }

  statement {
    actions = [
      "sqs:SendMessage",
      "sqs:SendMessageBatch",
      "sqs:PurgeQueue",
    ]
    condition {
      test     = "ArnLike"
      variable = "aws:SourceArn"
      values = [
        aws_cloudwatch_event_rule.charts_messages_rule.arn
      ]
    }
    effect = "Allow"
    principals {
      type        = "Service"
      identifiers = ["events.amazonaws.com"]
    }
    resources = [
      module.playlists_messages_update_queue.queue.arn
    ]
    sid = "Queue permissions"
  }
}

resource "aws_sqs_queue_policy" "playlists_messages_update_policy" {
  queue_url = module.playlists_messages_update_queue.queue.id
  policy    = data.aws_iam_policy_document.playlists_messages_update_policy.json
}

// playlists messages exit

module "playlists_messages_exit_dlq" {
  source = "../../../modules/sqs/"

  name_prefix       = local.name_prefix
  name              = "playlists_messages_exit_dlq"
  kms_master_key_id = data.aws_kms_key.default_sqs_key.key_id

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Portal",
      service                  = "SQS",
      plat_env_project_service = "${local.aggregated_tag}_PRL_SQS"
    }
  )
}

module "playlists_messages_exit_queue" {
  source = "../../../modules/sqs/"

  name_prefix                = local.name_prefix
  name                       = "playlists_messages_exit"
  kms_master_key_id          = data.aws_kms_key.default_sqs_key.key_id
  visibility_timeout_seconds = "300"
  dead_letter_queue          = module.playlists_messages_exit_dlq.queue.arn
  max_receive_count          = 1

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Portal",
      service                  = "SQS",
      plat_env_project_service = "${local.aggregated_tag}_PRL_SQS"
    }
  )
}

data "aws_iam_policy_document" "playlists_messages_exit_policy" {
  version = "2012-10-17"

  statement {
    sid    = "AllowSNSPublish"
    effect = "Allow"
    principals {
      identifiers = ["sns.amazonaws.com"]
      type        = "Service"
    }
    actions = ["sqs:SendMessage"]
    condition {
      test     = "ArnLike"
      variable = "aws:SourceArn"
      values = [
        module.messages_sns_topic.topic.arn
      ]
    }
    resources = [
      module.playlists_messages_exit_queue.queue.arn
    ]
  }

  statement {
    actions = [
      "sqs:SendMessage",
      "sqs:SendMessageBatch",
      "sqs:PurgeQueue",
    ]
    condition {
      test     = "ArnLike"
      variable = "aws:SourceArn"
      values = [
        aws_cloudwatch_event_rule.charts_messages_rule.arn
      ]
    }
    effect = "Allow"
    principals {
      type        = "Service"
      identifiers = ["events.amazonaws.com"]
    }
    resources = [
      module.playlists_messages_exit_queue.queue.arn
    ]
    sid = "Queue permissions"
  }
}

resource "aws_sqs_queue_policy" "playlists_messages_exit_policy" {
  queue_url = module.playlists_messages_exit_queue.queue.id
  policy    = data.aws_iam_policy_document.playlists_messages_exit_policy.json
}

// playlists messages major move

module "playlists_messages_major_move_dlq" {
  source = "../../../modules/sqs/"

  name_prefix       = local.name_prefix
  name              = "playlists_messages_major_move_dlq"
  kms_master_key_id = data.aws_kms_key.default_sqs_key.key_id

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Portal",
      service                  = "SQS",
      plat_env_project_service = "${local.aggregated_tag}_PRL_SQS"
    }
  )
}

module "playlists_messages_major_move_queue" {
  source = "../../../modules/sqs/"

  name_prefix                = local.name_prefix
  name                       = "playlists_messages_major_move"
  kms_master_key_id          = data.aws_kms_key.default_sqs_key.key_id
  visibility_timeout_seconds = "300"
  dead_letter_queue          = module.playlists_messages_major_move_dlq.queue.arn
  max_receive_count          = 1

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Portal",
      service                  = "SQS",
      plat_env_project_service = "${local.aggregated_tag}_PRL_SQS"
    }
  )
}

data "aws_iam_policy_document" "playlists_messages_major_move_policy" {
  version = "2012-10-17"

  statement {
    sid    = "AllowSNSPublish"
    effect = "Allow"
    principals {
      identifiers = ["sns.amazonaws.com"]
      type        = "Service"
    }
    actions = ["sqs:SendMessage"]
    condition {
      test     = "ArnLike"
      variable = "aws:SourceArn"
      values = [
        module.messages_sns_topic.topic.arn
      ]
    }
    resources = [
      module.playlists_messages_major_move_queue.queue.arn
    ]
  }

  statement {
    actions = [
      "sqs:SendMessage",
      "sqs:SendMessageBatch",
      "sqs:PurgeQueue",
    ]
    condition {
      test     = "ArnLike"
      variable = "aws:SourceArn"
      values = [
        aws_cloudwatch_event_rule.charts_messages_rule.arn
      ]
    }
    effect = "Allow"
    principals {
      type        = "Service"
      identifiers = ["events.amazonaws.com"]
    }
    resources = [
      module.playlists_messages_major_move_queue.queue.arn
    ]
    sid = "Queue permissions"
  }
}

resource "aws_sqs_queue_policy" "playlists_messages_major_move_policy" {
  queue_url = module.playlists_messages_major_move_queue.queue.id
  policy    = data.aws_iam_policy_document.playlists_messages_major_move_policy.json
}

// feed messages

module "basic_messages_dlq" {
  source = "../../../modules/sqs/"

  name_prefix       = local.name_prefix
  name              = "basic_messages_dlq"
  kms_master_key_id = data.aws_kms_key.default_sqs_key.key_id

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Portal",
      service                  = "SQS",
      plat_env_project_service = "${local.aggregated_tag}_PRL_SQS"
    }
  )
}

module "basic_messages_queue" {
  source = "../../../modules/sqs/"

  name_prefix                = local.name_prefix
  name                       = "basic_messages"
  kms_master_key_id          = data.aws_kms_key.default_sqs_key.key_id
  visibility_timeout_seconds = "300"
  dead_letter_queue          = module.basic_messages_dlq.queue.arn
  max_receive_count          = 1

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Portal",
      service                  = "SQS",
      plat_env_project_service = "${local.aggregated_tag}_PRL_SQS"
    }
  )
}

data "aws_iam_policy_document" "basic_messages_policy" {
  version = "2012-10-17"

  statement {
    sid    = "AllowSNSPublish"
    effect = "Allow"
    principals {
      identifiers = ["sns.amazonaws.com"]
      type        = "Service"
    }
    actions = ["sqs:SendMessage"]
    condition {
      test     = "ArnLike"
      variable = "aws:SourceArn"
      values = [
        module.messages_sns_topic.topic.arn
      ]
    }
    resources = [
      module.basic_messages_queue.queue.arn
    ]
  }

  statement {
    actions = [
      "sqs:SendMessage",
      "sqs:SendMessageBatch",
      "sqs:PurgeQueue",
    ]
    condition {
      test     = "ArnLike"
      variable = "aws:SourceArn"
      values = [
        aws_cloudwatch_event_rule.charts_messages_rule.arn
      ]
    }
    effect = "Allow"
    principals {
      type        = "Service"
      identifiers = ["events.amazonaws.com"]
    }
    resources = [
      module.basic_messages_queue.queue.arn
    ]
    sid = "Queue permissions"
  }
}

resource "aws_sqs_queue_policy" "basic_messages_policy" {
  queue_url = module.basic_messages_queue.queue.id
  policy    = data.aws_iam_policy_document.basic_messages_policy.json
}

// feed messages

module "feed_messages_dlq" {
  source = "../../../modules/sqs/"

  name_prefix       = local.name_prefix
  name              = "feed_messages_dlq"
  kms_master_key_id = data.aws_kms_key.default_sqs_key.key_id

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Portal",
      service                  = "SQS",
      plat_env_project_service = "${local.aggregated_tag}_PRL_SQS"
    }
  )
}

module "feed_messages_queue" {
  source = "../../../modules/sqs/"

  name_prefix                = local.name_prefix
  name                       = "feed_messages"
  kms_master_key_id          = data.aws_kms_key.default_sqs_key.key_id
  visibility_timeout_seconds = "300"
  dead_letter_queue          = module.feed_messages_dlq.queue.arn
  max_receive_count          = 1

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Portal",
      service                  = "SQS",
      plat_env_project_service = "${local.aggregated_tag}_PRL_SQS"
    }
  )
}

data "aws_iam_policy_document" "feed_messages_policy" {
  version = "2012-10-17"

  statement {
    sid    = "AllowSNSPublish"
    effect = "Allow"
    principals {
      identifiers = ["sns.amazonaws.com"]
      type        = "Service"
    }
    actions = ["sqs:SendMessage"]
    condition {
      test     = "ArnLike"
      variable = "aws:SourceArn"
      values = [
        module.messages_sns_topic.topic.arn
      ]
    }
    resources = [
      module.feed_messages_queue.queue.arn
    ]
  }

  statement {
    actions = [
      "sqs:SendMessage",
      "sqs:SendMessageBatch",
      "sqs:PurgeQueue",
    ]
    condition {
      test     = "ArnLike"
      variable = "aws:SourceArn"
      values = [
        aws_cloudwatch_event_rule.charts_messages_rule.arn
      ]
    }
    effect = "Allow"
    principals {
      type        = "Service"
      identifiers = ["events.amazonaws.com"]
    }
    resources = [
      module.feed_messages_queue.queue.arn
    ]
    sid = "Queue permissions"
  }
}

resource "aws_sqs_queue_policy" "feed_messages_policy" {
  queue_url = module.feed_messages_queue.queue.id
  policy    = data.aws_iam_policy_document.feed_messages_policy.json
}

// playlists_sync_user_execution_queue

module "playlists_sync_user_execution_dlq" {
  source = "../../../modules/sqs/"

  name_prefix       = local.name_prefix
  name              = "playlists_sync_user_execution_dlq"
  kms_master_key_id = data.aws_kms_key.default_sqs_key.key_id

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Portal",
      service                  = "SQS",
      plat_env_project_service = "${local.aggregated_tag}_PRL_SQS"
    }
  )
}

module "playlists_sync_user_execution_queue" {
  source = "../../../modules/sqs/"

  name_prefix                = local.name_prefix
  name                       = "playlists_sync_user_execution"
  kms_master_key_id          = data.aws_kms_key.default_sqs_key.key_id
  visibility_timeout_seconds = "300"
  dead_letter_queue          = module.playlists_sync_user_execution_dlq.queue.arn
  max_receive_count          = 1

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Portal",
      service                  = "SQS",
      plat_env_project_service = "${local.aggregated_tag}_PRL_SQS"
    }
  )
}

// playlists_sync_schedule_execution_queue

module "playlists_sync_schedule_execution_dlq" {
  source = "../../../modules/sqs/"

  name_prefix       = local.name_prefix
  name              = "playlists_sync_schedule_execution_dlq"
  kms_master_key_id = data.aws_kms_key.default_sqs_key.key_id

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Portal",
      service                  = "SQS",
      plat_env_project_service = "${local.aggregated_tag}_PRL_SQS"
    }
  )
}

module "playlists_sync_schedule_execution_queue" {
  source = "../../../modules/sqs/"

  name_prefix                = local.name_prefix
  name                       = "playlists_sync_schedule_execution"
  kms_master_key_id          = data.aws_kms_key.default_sqs_key.key_id
  visibility_timeout_seconds = "900"
  dead_letter_queue          = module.playlists_sync_schedule_execution_dlq.queue.arn
  max_receive_count          = 1

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Portal",
      service                  = "SQS",
      plat_env_project_service = "${local.aggregated_tag}_PRL_SQS"
    }
  )
}
