module "default_tags" {
  source             = "git@github.com:theorchard/terraform-default-tags.git//?ref=2.0.0"
  environment        = var.environment
  application_family = var.application_family
  team_name          = var.team_name
  service_name       = var.service_name
}

provider "aws" {
  region = var.aws_region

  default_tags {
    tags = module.default_tags.tags
  }
}

# Terraform backends cannot contain interpolations
terraform {
  backend "s3" {
    bucket  = "qa-fansifter-terraform-state"
    key     = "qa/datadog-forwarder/terraform.tfstate"
    region  = "us-east-1"
    encrypt = "true"
  }
}

data "aws_caller_identity" "current" {}

module "datadog_forwarder_lambda" {
  source = "git@github.com:theorchard/terraform-lambda.git//?ref=5.3.0"

  environment                    = var.environment
  lambda_name                    = var.service_name
  application_family             = var.application_family
  lambda_description             = "Pushes logs, metrics and traces from AWS to Datadog."
  splitio_enabled                = false
  ows_machine_to_machine_enabled = false

  use_custom_function_name = true
  custom_function_name     = "DatadogLambdaFunction"

  use_container_image = true

  lambda_function_memory_size                    = var.lambda_memory_size
  lambda_function_timeout                        = var.lambda_timeout
  lambda_function_reserved_concurrent_executions = var.lambda_reserved_concurrent_executions

  lambda_function_environment_variables = local.lambda_environment_variables

  lambda_assume_role_service_identifiers = [
    "lambda.amazonaws.com"
  ]

  iam_managed_policy_attachments = local.lambda_policy_attachments

  vpc_enabled             = false
  dlq_enabled             = false
  datadog_enabled         = false
  zappa_s3_policy_enabled = false
}

module "datadog_forwarder_content_s3_bucket" {
  source = "git@github.com:theorchard/terraform-s3.git//modules/s3_bucket?ref=3.12.1"

  env                   = var.environment
  bucket_name           = var.bucket_name
  application_family    = var.application_family
  custom_logging_bucket = "qa-fansifter-s3-logs"

  apply_server_side_encryption_by_default = {
    sse_algorithm = "AES256"
  }
}

data "aws_sns_topic" "topics_to_subscribe" {
  for_each = toset(var.sns_topics_to_subscribe)

  name = each.value
}

# Subscribe Lambda to SNS topics
resource "aws_sns_topic_subscription" "subscription" {
  for_each = data.aws_sns_topic.topics_to_subscribe

  topic_arn              = each.value.arn
  protocol               = "lambda"
  endpoint               = module.datadog_forwarder_lambda.lambda_arn
  endpoint_auto_confirms = true
}
