# Tests lambda with generic Kafka trigger (used for cross-account MSK triggers).
locals {
  lambda_kafka_dir = "lambda/kafka"
  lambda_kafka_hash = md5(join(",", [
    filemd5("${local.lambda_kafka_dir}/index.py"),
    filemd5("${local.lambda_kafka_dir}/requirements.txt"),
    filemd5("${local.lambda_kafka_dir}/Dockerfile")
  ]))
}

resource "aws_ecr_repository" "lambda_kafka_repository" {
  name                 = "${var.service_name}-kafka"
  image_tag_mutability = "MUTABLE"

  encryption_configuration {
    encryption_type = "KMS"
  }

  image_scanning_configuration {
    scan_on_push = true
  }

  force_delete = true
}

resource "null_resource" "lambda_kafka_build" {
  triggers = {
    src_hash = local.lambda_kafka_hash
  }

  provisioner "local-exec" {
    command = "/bin/bash ./lambda/build-docker.sh"

    environment = {
      SRC_DIR             = local.lambda_kafka_dir
      ECR_REPOSITORY_NAME = aws_ecr_repository.lambda_kafka_repository.name
      ECR_REPOSITORY_TAG  = local.lambda_kafka_hash
      ECR_REPOSITORY_URL  = aws_ecr_repository.lambda_kafka_repository.repository_url
    }
  }
}

resource "kafka_topic" "lambda_kafka_topic" {
  name               = "${var.service_name}-kafka"
  partitions         = 1
  replication_factor = 3
}

module "lambda_kafka" {
  source = "../"

  environment        = var.environment
  lambda_name        = "${var.service_name}-kafka"
  lambda_description = "Tests lambda with kafka trigger."
  application_family = "platform"

  use_container_image        = true
  container_image_custom_uri = "${aws_ecr_repository.lambda_kafka_repository.repository_url}:${local.lambda_kafka_hash}"

  vpc_id                = var.vpc_id
  vpc_subnet_ids        = var.vpc_subnet_ids
  vpc_enable_eni_lookup = false

  datadog_enabled          = true
  datadog_advanced_enabled = true

  event_source_mapping_batch_size        = 1
  event_source_mapping_starting_position = "LATEST"

  kafka_event_enabled     = true
  kafka_topics            = [kafka_topic.lambda_kafka_topic.name]
  kafka_bootstrap_servers = var.kafka_bootstrap_servers

  lambda_function_environment_variables = {
    BUILD_ID = null_resource.lambda_kafka_build.id
  }

  depends_on = [
    aws_ecr_repository.lambda_kafka_repository
  ]
}
