module "notifications_sns_topic" {
  source = "../../../modules/sns/topic"

  name              = "${local.name_prefix}-notifications"
  kms_master_key_id = data.aws_kms_key.default_sns_key.id

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

module "push_messages_sns_topic" {
  source = "../../../modules/sns/topic"

  name              = "${local.name_prefix}-push-messages"
  kms_master_key_id = data.aws_kms_key.default_sns_key.id

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

resource "aws_sns_topic_subscription" "notifications_sqs_subscription" {
  topic_arn = module.notifications_sns_topic.topic.arn
  protocol  = "sqs"
  endpoint  = module.notifications_queue.queue.arn
}

resource "aws_sns_topic_subscription" "push_messages_sqs_subscription" {
  topic_arn = module.push_messages_sns_topic.topic.arn
  protocol  = "sqs"
  endpoint  = module.push_messages_queue.queue.arn
}

module "messages_sns_topic" {
  source = "../../../modules/sns/topic"

  name              = "${local.name_prefix}-messages"
  kms_master_key_id = data.aws_kms_key.default_sns_key.id

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

resource "aws_sns_topic_subscription" "messages_to_charts_entry_messages_sqs_subscription" {
  topic_arn     = module.messages_sns_topic.topic.arn
  protocol      = "sqs"
  endpoint      = module.charts_entry_messages_event_bus_queue.queue.arn
  filter_policy = jsonencode({ "code" : ["charts_updated"] })
}

resource "aws_sns_topic_subscription" "messages_to_charts_exit_messages_sqs_subscription" {
  topic_arn     = module.messages_sns_topic.topic.arn
  protocol      = "sqs"
  endpoint      = module.charts_exit_messages_event_bus_queue.queue.arn
  filter_policy = jsonencode({ "code" : ["charts_updated"] })
}

resource "aws_sns_topic_subscription" "messages_to_charts_move_messages_sqs_subscription" {
  topic_arn     = module.messages_sns_topic.topic.arn
  protocol      = "sqs"
  endpoint      = module.charts_move_messages_event_bus_queue.queue.arn
  filter_policy = jsonencode({ "code" : ["charts_updated"] })
}

resource "aws_sns_topic_subscription" "messages_to_charts_tracklist_update_messages_sqs_subscription" {
  topic_arn     = module.messages_sns_topic.topic.arn
  protocol      = "sqs"
  endpoint      = module.charts_tracklist_update_messages_event_bus_queue.queue.arn
  filter_policy = jsonencode({ "code" : ["charts_updated"] })
}
/*
resource "aws_sns_topic_subscription" "messages_to_charts_feed_messages_sqs_subscription" {
  topic_arn     = module.messages_sns_topic.topic.arn
  protocol      = "sqs"
  endpoint      = module.charts_feed_messages_event_bus_queue.queue.arn
  filter_policy = jsonencode({ "code" : ["messages_created"], "subject" : ["starred_track_in_chart"] })
}

resource "aws_sns_topic_subscription" "messages_to_charts_push_messages_sqs_subscription" {
  topic_arn     = module.messages_sns_topic.topic.arn
  protocol      = "sqs"
  endpoint      = module.charts_push_messages_event_bus_queue.queue.arn
  filter_policy = jsonencode({ "code" : ["feed_messages_created"], "subject" : ["starred_track_in_chart"] })
}
*/
resource "aws_sns_topic_subscription" "messages_to_push_messages_sqs_subscription" {
  topic_arn     = module.messages_sns_topic.topic.arn
  protocol      = "sqs"
  endpoint      = module.push_messages_queue.queue.arn
  filter_policy = jsonencode({ "code" : ["push_messages_created"] })
}

resource "aws_sns_topic_subscription" "messages_to_juno_updated_sqs_subscription" {
  topic_arn     = module.messages_sns_topic.topic.arn
  protocol      = "sqs"
  endpoint      = module.juno_updated_event_bus_queue.queue.arn
  filter_policy = jsonencode({ "code" : ["juno_updated"] })
}

resource "aws_sns_topic_subscription" "messages_to_juno_filter_notifications_sqs_subscription" {
  topic_arn     = module.messages_sns_topic.topic.arn
  protocol      = "sqs"
  endpoint      = module.juno_filter_notifications_event_bus_queue.queue.arn
  filter_policy = jsonencode({ "code" : ["messages_created"], "subject" : ["juno_digest"] })
}

resource "aws_sns_topic_subscription" "messages_to_playlists_messages_entry_sqs_subscription" {
  topic_arn     = module.messages_sns_topic.topic.arn
  protocol      = "sqs"
  endpoint      = module.playlists_messages_entry_queue.queue.arn
  filter_policy = jsonencode({ "code" : ["playlists_entry"] })
}

resource "aws_sns_topic_subscription" "messages_to_playlists_messages_update_sqs_subscription" {
  topic_arn     = module.messages_sns_topic.topic.arn
  protocol      = "sqs"
  endpoint      = module.playlists_messages_update_queue.queue.arn
  filter_policy = jsonencode({ "code" : ["playlists_tracklist_update"] })
}

resource "aws_sns_topic_subscription" "messages_to_playlists_messages_exit_sqs_subscription" {
  topic_arn     = module.messages_sns_topic.topic.arn
  protocol      = "sqs"
  endpoint      = module.playlists_messages_exit_queue.queue.arn
  filter_policy = jsonencode({ "code" : ["playlists_exit"] })
}

resource "aws_sns_topic_subscription" "messages_to_playlists_messages_major_move_sqs_subscription" {
  topic_arn     = module.messages_sns_topic.topic.arn
  protocol      = "sqs"
  endpoint      = module.playlists_messages_major_move_queue.queue.arn
  filter_policy = jsonencode({ "code" : ["playlists_major_move"] })
}

resource "aws_sns_topic_subscription" "messages_to_basic_messages_sqs_subscription" {
  topic_arn     = module.messages_sns_topic.topic.arn
  protocol      = "sqs"
  endpoint      = module.basic_messages_queue.queue.arn
  filter_policy = jsonencode({ "code" : ["messages_created"], "subject" : ["starred_track_in_playlist", "starred_playlist", "top_chart", "starred_track_in_chart"] })
}

resource "aws_sns_topic_subscription" "messages_to_feed_messages_sqs_subscription" {
  topic_arn     = module.messages_sns_topic.topic.arn
  protocol      = "sqs"
  endpoint      = module.feed_messages_queue.queue.arn
  filter_policy = jsonencode({ "code" : ["feed_messages_created"], "subject" : ["starred_track_in_playlist", "starred_playlist", "top_chart", "starred_track_in_chart"] })
}
