
resource "aws_s3_bucket_notification" "s3_decibel" {
  bucket = module.s3_decibel.bucket.id
  queue {
    queue_arn     = aws_sqs_queue.s3_decibel.arn
    events        = ["s3:ObjectCreated:*"]
    filter_prefix = "ADS_DATA/"
  }
  queue {
    queue_arn     = aws_sqs_queue.s3_decibel.arn
    events        = ["s3:ObjectCreated:*"]
    filter_prefix = "LINKFIRE/"
  }
}

resource "aws_s3_bucket_notification" "s3_chartmetric" {
  bucket = module.s3_chartmetric.bucket.id
  queue {
    queue_arn = aws_sqs_queue.s3_decibel.arn
    events    = ["s3:ObjectCreated:*"]
  }
}

resource "aws_sqs_queue" "s3_decibel_dlq" {
  name = "${local.name_prefix}-public-data-exporter-s3-events-DLQ"
  tags = merge(
    local.common_tags,
    {
      project                  = "Decibel",
      service                  = "S3",
      plat_env_project_service = "${local.aggregated_tag}_DCBL_S3"
    }
  )
  kms_master_key_id                 = local.sqs_kms_master_key_id
  kms_data_key_reuse_period_seconds = local.sqs_kms_data_key_reuse_period_seconds
}

locals {
  sqs_kms_master_key_id                 = "alias/default_sqs"
  sqs_kms_data_key_reuse_period_seconds = 900
  sqs_kms_arn                           = local.sqs_kms_master_key_id != null ? "arn:aws:kms:${data.aws_region.current.region}:${data.aws_caller_identity.current.account_id}:key/${local.sqs_kms_master_key_id}" : null
}

data "aws_region" "current" {}

resource "aws_sqs_queue" "s3_decibel" {
  name                       = "${local.name_prefix}-public-data-exporter-s3-events"
  visibility_timeout_seconds = 900
  message_retention_seconds  = 345600
  receive_wait_time_seconds  = 20
  tags = merge(
    local.common_tags,
    {
      project                  = "Decibel",
      service                  = "S3",
      plat_env_project_service = "${local.aggregated_tag}_DCBL_S3"
    }
  )
  kms_master_key_id                 = local.sqs_kms_master_key_id
  kms_data_key_reuse_period_seconds = local.sqs_kms_data_key_reuse_period_seconds

  redrive_policy = <<POLICY
{
  "deadLetterTargetArn":"${aws_sqs_queue.s3_decibel_dlq.arn}",
  "maxReceiveCount":5
}
POLICY
}



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

  statement {
    actions = [
      "sqs:SendMessage"
    ]
    condition {
      test     = "ArnLike"
      variable = "aws:SourceArn"
      values = [
        module.s3_decibel.bucket.arn,
        module.s3_chartmetric.bucket.arn,
        module.s3_public-data-etl-export.bucket.arn,
        module.s3_private-data-etl-export.bucket.arn,
        module.s3_spotify-juno-export.bucket.arn,
        module.s3_market_size_export.bucket.arn,
      ]
    }
    effect = "Allow"
    principals {
      type        = "AWS"
      identifiers = ["*"]
    }
    resources = [
      aws_sqs_queue.s3_decibel.arn,
    ]
    sid = "${local.name_prefix}-public-data-exporter-s3-events"
  }
}

resource "aws_sqs_queue_policy" "s3_decibel" {
  queue_url = aws_sqs_queue.s3_decibel.id
  policy    = data.aws_iam_policy_document.s3_decibel_sqs.json
}

