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

# Enable EventBridge notifications for S3 bucket
resource "aws_s3_bucket_notification" "abacus_file_upload_eventbridge_notification" {
  bucket      = module.s3_prod_abacus_adjustments_bucket.s3_bucket_name_output
  eventbridge = true
}

# EventBridge rule to trigger Step Functions on S3 uploads
resource "aws_cloudwatch_event_rule" "abacus_file_upload_trigger" {
  name        = "${var.environment}-abacus-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 = [module.s3_prod_abacus_adjustments_bucket.s3_bucket_name_output]
      }
      object = {
        key = [{
          prefix = "uploads/"
        }]
      }
    }
  })

  tags = {
    application_family = var.application_family
    environment        = var.environment
    service_name       = var.service_name
    terraformed        = true
  }
}

# EventBridge target to invoke Step Functions
resource "aws_cloudwatch_event_target" "abacus_file_upload_workflow_target" {
  rule      = aws_cloudwatch_event_rule.abacus_file_upload_trigger.name
  target_id = "FileUploadStepFunctions"
  arn       = aws_sfn_state_machine.abacus_file_upload_workflow.arn
  role_arn  = aws_iam_role.abacus_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.abacus_file_upload_workflow_dlq.arn
  }
}
