########################
## abacus-file-upload ##
########################

# Enable EventBridge notifications for S3 bucket
resource "aws_s3_bucket_notification" "upload_eventbridge_notification" {
  bucket      = aws_s3_bucket.abacus_adjustments.id
  eventbridge = true
}

# EventBridge rule to trigger Step Functions on S3 uploads
resource "aws_cloudwatch_event_rule" "file_upload_trigger" {
  name        = "${var.environment}-file-upload-trigger"
  description = "Trigger file upload workflow on S3 object creation in {env}-abacus-adjustments bucket (uploads/ prefix only)"

  event_pattern = jsonencode({
    source      = ["aws.s3"]
    detail-type = ["Object Created"]
    detail = {
      bucket = {
        name = [aws_s3_bucket.abacus_adjustments.id]
      }
      object = {
        key = [{
          prefix = "uploads/"
        }]
      }
    }
  })

  tags = local.common_tags
}

# EventBridge target to invoke Step Functions
resource "aws_cloudwatch_event_target" "file_upload_workflow_target" {
  rule      = aws_cloudwatch_event_rule.file_upload_trigger.name
  target_id = "FileUploadStepFunctions"
  arn       = aws_sfn_state_machine.file_upload_workflow.arn
  role_arn  = aws_iam_role.eventbridge_sfn_role.arn

  retry_policy {
    maximum_event_age_in_seconds = 86400  # 24 hours
    maximum_retry_attempts       = 3
  }

  dead_letter_config {
    arn = aws_sqs_queue.file_upload_workflow_dlq.arn
  }
}
