#  Policy for starting execution initiated by an Eventbridge rule
data "aws_iam_policy_document" "eventbridge_start_execution_policy" {
  statement {
    actions = [
      "lambda:InvokeFunction",
    ]

    resources = [
      module.lambda_a360_profile_creator.lambda_arn,
    ]
  }
}

data "aws_iam_policy_document" "eventbridge_assume_role_for_events_policy" {
  statement {
    actions = [
      "sts:AssumeRole",
    ]

    principals {
      type = "Service"

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

# Eventbridge rule role for starting execution
resource "aws_iam_role" "eventbridge_invoke_lambda_role" {
  name               = "${var.environment}-${var.service_name}-invoke-lambda"
  assume_role_policy = data.aws_iam_policy_document.eventbridge_assume_role_for_events_policy.json
}

resource "aws_iam_role_policy" "eventbridge_start_execution_role_policy" {
  name   = "${var.environment}-${var.service_name}-invoke-lambda"
  role   = aws_iam_role.eventbridge_invoke_lambda_role.id
  policy = data.aws_iam_policy_document.eventbridge_start_execution_policy.json
}

resource "aws_cloudwatch_event_rule" "s3_eventbridge_rule" {
  name          = "${var.environment}-${var.bucket_name}-a360-s3-event-rule"
  description   = "The Eventbridge rule for put events on altafonte-user-ingestion/a360"
  event_pattern = jsonencode({
    source = ["aws.s3"]
    detail-type = ["Object Created"]
    detail = {
      bucket = {
        name = ["${var.environment}-${var.bucket_name}"]
      }
      object = {
        key = [
          {
            wildcard = "a360/backfill-*.csv"
          },
        ]
      }
    }
  })
}

resource "aws_cloudwatch_event_target" "s3_eventbridge_event_target" {
  rule      = aws_cloudwatch_event_rule.s3_eventbridge_rule.name
  target_id = "${var.environment}-${var.bucket_name}-a360-target"
  arn       = module.lambda_a360_profile_creator.lambda_arn
  role_arn  = aws_iam_role.eventbridge_invoke_lambda_role.arn
}
