data "template_file" "bulk_assets_ingester_event_definition" {
  template = file("${path.module}/${var.bulk_assets_ingester_cloudwatch_event_rule_pattern_file}")

  vars = {
    observed_bucket_name        = "${var.environment}-${var.bulk_assets_ingester_input_bucket}"
    bulk_assets_ingester_prefix = var.bulk_assets_ingester_prefix
  }
}

# Event rule for bulk-assets-ingester.
resource "aws_cloudwatch_event_rule" "bulk_assets_ingester_s3_event_rule" {
  name          = "${var.environment}-bulk_assets-ingester-s3-event-rule"
  description   = "The CloudWatch event rule for put/copy object events on the Bulk Assets Ingest bucket bulk_assets_ingester folder"
  event_pattern = data.template_file.bulk_assets_ingester_event_definition.rendered
}

resource "aws_cloudwatch_event_target" "bulk_assets_ingester_state_machine_target" {
  rule      = aws_cloudwatch_event_rule.bulk_assets_ingester_s3_event_rule.name
  target_id = "${var.environment}_bulk_assets_ingester_event_rule_target"
  arn       = module.lambda_trigger_state_machine.lambda_arn
}

resource "aws_lambda_permission" "allow_cloudwatch_trigger_state_machine_event" {
  statement_id  = "AllowTriggerStateMachineEvent"
  action        = "lambda:InvokeFunction"
  function_name = module.lambda_trigger_state_machine.lambda_name
  principal     = "events.amazonaws.com"
  source_arn    = aws_cloudwatch_event_rule.bulk_assets_ingester_s3_event_rule.arn
}
