data "aws_s3_bucket" "sme_data_decompressed" {
  bucket = "${local.env_prefix}-sme-data-decompressed"
}

data "aws_lambda_function" "slz_dbx_job_runner" {
  function_name = "${local.name_prefix}-slz-dbx-job-runner-${local.env_prefix}"
}

resource "aws_s3_bucket_notification" "decompressed_bucket_notifications" {
  bucket = data.aws_s3_bucket.sme_data_decompressed.id

  lambda_function {
    lambda_function_arn = data.aws_lambda_function.chartmetric_manager.arn
    events              = ["s3:ObjectCreated:*"]
    filter_prefix       = "chartmetric/v1/"
  }

  lambda_function {
    lambda_function_arn = data.aws_lambda_function.slz_dbx_job_runner.arn
    events              = ["s3:ObjectCreated:*"]
    filter_prefix       = "apollo/apple_playlist_track_position/"
  }

  lambda_function {
    lambda_function_arn = data.aws_lambda_function.slz_dbx_job_runner.arn
    events              = ["s3:ObjectCreated:*"]
    filter_prefix       = "apollo/spotify_playlist_track_position/"
  }

  #  lambda_function {
  #    lambda_function_arn = data.aws_lambda_function.slz_dbx_job_runner.arn
  #    events              = ["s3:ObjectCreated:*"]
  #    filter_prefix       = "chartmetric/amazon_playlist_track_position/"
  #  }

  queue {
    queue_arn     = var.snowflake_sqs_arn
    events        = ["s3:ObjectCreated:*"]
    filter_prefix = "gras/"
  }

  queue {
    queue_arn     = var.snowflake_sqs_arn
    events        = ["s3:ObjectCreated:*"]
    filter_prefix = "sme_max/"
  }

  queue {
    queue_arn     = var.snowflake_sqs_arn
    events        = ["s3:ObjectCreated:*"]
    filter_prefix = "tiktokreporting/"
  }

  queue {
    queue_arn     = var.snowflake_sqs_arn
    events        = ["s3:ObjectCreated:*"]
    filter_prefix = "linkfire/"
  }

  queue {
    queue_arn     = var.snowflake_sqs_arn
    events        = ["s3:ObjectCreated:*"]
    filter_prefix = "appreciationengine/request_to_forget/"
  }

  queue {
    queue_arn     = var.snowflake_sqs_arn
    events        = ["s3:ObjectCreated:*"]
    filter_prefix = "appreciationengine/businessunit/"
  }

  queue {
    queue_arn     = var.snowflake_sqs_arn
    events        = ["s3:ObjectCreated:*"]
    filter_prefix = "apple/container/v1_0/"
  }

  queue {
    queue_arn     = var.snowflake_sqs_arn
    events        = ["s3:ObjectCreated:*"]
    filter_prefix = "brandwatch/"
  }

  queue {
    queue_arn     = var.snowflake_sqs_arn
    events        = ["s3:ObjectCreated:*"]
    filter_prefix = "apollo/dapd_rti_starred_tracks/"
  }

  queue {
    queue_arn     = var.snowflake_sqs_arn
    events        = ["s3:ObjectCreated:*"]
    filter_prefix = "apollo/dapd_apollo_starred_playlists/"
  }

  queue {
    queue_arn     = var.snowflake_sqs_arn
    events        = ["s3:ObjectCreated:*"]
    filter_prefix = "apollo/dapd_apollo_starred_tracks/"
  }

  queue {
    queue_arn     = var.snowflake_sqs_arn
    events        = ["s3:ObjectCreated:*"]
    filter_prefix = "apollo/dapd_spotify_top_playlists/"
  }

  queue {
    queue_arn     = var.snowflake_sqs_arn
    events        = ["s3:ObjectCreated:*"]
    filter_prefix = "apollo/dapd_apple_top_playlists/"
  }

  queue {
    queue_arn     = var.snowflake_sqs_arn
    events        = ["s3:ObjectCreated:*"]
    filter_prefix = "appreciationengine/activityfeedtotalcount/"
  }

  depends_on = [
    aws_lambda_permission.sme_data_decompressed_chartmetric_manager,
    aws_lambda_permission.sme_data_decompressed_slz_dbx_job_runner
  ]
}

resource "aws_lambda_permission" "sme_data_decompressed_chartmetric_manager" {
  statement_id  = "AllowExecutionFromS3Bucket"
  action        = "lambda:InvokeFunction"
  function_name = data.aws_lambda_function.chartmetric_manager.arn
  principal     = "s3.amazonaws.com"
  source_arn    = data.aws_s3_bucket.sme_data_decompressed.arn
}

resource "aws_lambda_permission" "sme_data_decompressed_slz_dbx_job_runner" {
  statement_id  = "AllowExecutionFromS3Bucket"
  action        = "lambda:InvokeFunction"
  function_name = data.aws_lambda_function.slz_dbx_job_runner.arn
  principal     = "s3.amazonaws.com"
  source_arn    = data.aws_s3_bucket.sme_data_decompressed.arn
}

data "aws_s3_bucket" "outgoing_bucket" {
  bucket = "${local.name_prefix}-outgoing"
}

resource "aws_s3_bucket_notification" "outgoing" {
  bucket = data.aws_s3_bucket.outgoing_bucket.id
  topic {
    topic_arn     = aws_sns_topic.slz_gdpr_user_forget_req_result_topic.arn
    events        = ["s3:ObjectCreated:*"]
    filter_prefix = "appreciationengine/request_to_forget/"
  }

  lambda_function {
    lambda_function_arn = aws_lambda_function.slz_gdpr_deletion_diff_sender.arn
    events              = ["s3:ObjectCreated:*"]
    filter_prefix       = "appreciationengine/activity_feed_diff_check_report/"
  }

  depends_on = [
    aws_lambda_permission.outgoing_slz_gdpr_deletion_diff_sender
  ]
}

resource "aws_lambda_permission" "outgoing_slz_gdpr_deletion_diff_sender" {
  statement_id  = "AllowExecutionFromS3OutgoingBucket"
  action        = "lambda:InvokeFunction"
  function_name = aws_lambda_function.slz_gdpr_deletion_diff_sender.arn
  principal     = "s3.amazonaws.com"
  source_arn    = data.aws_s3_bucket.outgoing_bucket.arn
}

data "aws_s3_bucket" "import_bucket" {
  bucket = "${local.name_prefix}-import"
}

resource "aws_s3_bucket_notification" "import_bucket_notifications" {
  bucket = data.aws_s3_bucket.import_bucket.id

  queue {
    queue_arn = var.snowflake_sqs_arn
    events    = ["s3:ObjectCreated:*"]
  }
}

data "aws_s3_bucket" "incoming_bucket" {
  bucket = "${local.name_prefix}-incoming"
}

resource "aws_s3_bucket_notification" "incoming_bucket_notifications" {
  bucket = data.aws_s3_bucket.incoming_bucket.id

  queue {
    queue_arn     = var.snowflake_sqs_arn
    events        = ["s3:ObjectCreated:*"]
    filter_prefix = "appreciationengine/smf_mapping/"
  }

  queue {
    queue_arn     = var.snowflake_sqs_arn
    events        = ["s3:ObjectCreated:*"]
    filter_prefix = "appreciationengine/smf_mcr/"
  }

  lambda_function {
    lambda_function_arn = aws_lambda_function.slz_gdpr_deletion_diff_sender.arn
    events              = ["s3:ObjectCreated:*"]
    filter_prefix       = "appreciationengine/ae_processed_delete_requests/"
  }
}

resource "aws_lambda_permission" "incoming_slz_gdpr_deletion_diff_sender" {
  statement_id  = "AllowExecutionFromS3IncomingBucket"
  action        = "lambda:InvokeFunction"
  function_name = aws_lambda_function.slz_gdpr_deletion_diff_sender.arn
  principal     = "s3.amazonaws.com"
  source_arn    = data.aws_s3_bucket.incoming_bucket.arn
}

data "aws_s3_bucket" "whitelist_bucket" {
  bucket = "${local.name_prefix}-whitelist-db"
}

resource "aws_s3_bucket_notification" "whitelist_bucket_notifications" {
  bucket = data.aws_s3_bucket.whitelist_bucket.id

  queue {
    queue_arn     = var.snowflake_sqs_arn
    events        = ["s3:ObjectCreated:*"]
    filter_prefix = "wl_us_ultra/public/"
  }
}

data "aws_s3_bucket" "playlist_notifications_bucket" {
  bucket = "${local.name_prefix}-playlist-notifications"
}

resource "aws_s3_bucket_notification" "playlist_notifications_bucket_notifications" {
  bucket = data.aws_s3_bucket.playlist_notifications_bucket.id

  queue {
    queue_arn     = aws_sqs_queue.sf_notification.arn
    events        = ["s3:ObjectCreated:*"]
    filter_prefix = "playlist_notification/"
    filter_suffix = "/_success"
  }
}

/* data "aws_s3_bucket" "crm" {
  bucket = "${local.name_prefix}-crm"
}

resource "aws_s3_bucket_notification" "crm" {
  bucket = data.aws_s3_bucket.crm.id

  queue {
    queue_arn     = var.snowflake_sqs_arn
    events        = ["s3:ObjectCreated:*"]
    filter_prefix = "salesforce-marketing-cloud/"
  }
} */
