#  Policy for starting execution initiated by a CloudWatch rule.
data "aws_iam_policy_document" "sfn_sme_marketing_start_execution_policy" {
  statement {
    actions = [
      "states:StartExecution",
    ]

    resources = [
      aws_sfn_state_machine.sfn_sme_marketing_ingester.id,
    ]
  }
}

data "aws_iam_policy_document" "sfn_sme_marketing_assume_role_for_events_policy" {
  statement {
    sid = "AllowCWEServiceToAssumeRole"

    actions = [
      "sts:AssumeRole",
    ]

    principals {
      type = "Service"

      identifiers = [
        "events.amazonaws.com",
        "states.amazonaws.com"
      ]
    }
  }
}

# CloudWatch event rule role for starting execution
resource "aws_iam_role" "sme_marketing_execute_state_machine_role" {
  name               = "${var.environment}-sme_marketing-execute-state-machine"
  assume_role_policy = data.aws_iam_policy_document.sfn_sme_marketing_assume_role_for_events_policy.json
}

resource "aws_iam_role_policy" "sme_marketing_start_execution_role_policy" {
  name   = "${var.environment}-sme-marketing-execute-state-machine"
  role   = aws_iam_role.sme_marketing_execute_state_machine_role.id
  policy = data.aws_iam_policy_document.sfn_sme_marketing_start_execution_policy.json
}

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

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

# Event rule for SME marketing.
resource "aws_cloudwatch_event_rule" "sme_marketing_s3_event_rule" {
  name          = "${var.environment}-sme-marketing-s3-event-rule"
  description   = "The CloudWatch event rule for put/copy object events on the DDEX Ingest bucket sme_marketing folder"
  event_pattern = data.template_file.sme_marketing_event_definition.rendered
  role_arn      = aws_iam_role.sme_marketing_execute_state_machine_role.arn
}

resource "aws_cloudwatch_event_target" "sme_marketing_state_machine_target" {
  rule      = aws_cloudwatch_event_rule.sme_marketing_s3_event_rule.name
  role_arn  = aws_iam_role.sme_marketing_execute_state_machine_role.arn
  target_id = "${var.environment}_sme_marketing_state_machine_target_rule_target"
  arn       = aws_sfn_state_machine.sfn_sme_marketing_ingester.id
}
