locals {
  name_position = length(split(":", var.function_arn))
  function_name = split(":", var.function_arn)[local.name_position - 1]
}

resource "aws_lambda_permission" "allow_bucket" {
  statement_id_prefix = "AllowExecutionFromS3Bucket"
  action              = "lambda:InvokeFunction"
  function_name       = var.function_arn
  principal           = "s3.amazonaws.com"
  source_arn          = "arn:aws:s3:::${var.bucket_name}"
}

resource "aws_s3_bucket_notification" "bucket_notification" {
  bucket = var.bucket_name
  lambda_function {
    id                  = "${local.function_name}-rule"
    lambda_function_arn = var.function_arn
    events              = var.bucket_events
    filter_prefix       = var.bucket_filter_prefix == "" ? null : var.bucket_filter_prefix
    filter_suffix       = var.bucket_filter_suffix == "" ? null : var.bucket_filter_suffix
  }
}
