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

  vars = {
    observed_bucket_name = "${var.environment}-${var.ddex_ingester_input_bucket}"
    ddex_ingester_prefix = var.ddex_ingester_prefix
  }
}

# Event rule for DDEX ingester.
resource "aws_cloudwatch_event_rule" "ddex_ingester_s3_event_rule" {
  name          = "${var.environment}-ddex-ingester-s3-event-rule"
  description   = "The CloudWatch event rule for put/copy object events on the DDEX Ingest bucket ddex_ingester folder"
  event_pattern = data.template_file.ddex_ingester_event_definition.rendered
}

resource "aws_cloudwatch_event_target" "ddex_ingester_state_machine_target" {
  rule      = aws_cloudwatch_event_rule.ddex_ingester_s3_event_rule.name
  target_id = "${var.environment}_ddex_ingester_event_rule_target"
  arn       = data.aws_lambda_function.lambda_trigger_state_machine.arn
}

resource "aws_lambda_permission" "allow_cloudwatch_trigger_state_machine_event" {
  statement_id  = "AllowTriggerStateMachineEvent"
  action        = "lambda:InvokeFunction"
  function_name = "ddex-ingester-trigger-state-machine-prod"
  principal     = "events.amazonaws.com"
  source_arn    = aws_cloudwatch_event_rule.ddex_ingester_s3_event_rule.arn
}
