locals {
  name        = "${var.env_prefix}-${var.project_group}-${var.project}"
  name_prefix = "${var.env_prefix}-${var.project_group}"

  mapping_template = <<PORTS
[
        {
          "hostPort": ${var.container_port},
          "protocol": "tcp",
          "containerPort": ${var.container_port}
        }
]
PORTS

  port_mapping = var.port_mapping_enabled ? local.mapping_template : "[]"

  env_vars = concat(
    var.env_vars,
    [
      {
        name : "DATADOG_SERVICE_NAME",
        value : local.name
      }
    ]
  )

  dd_env_vars = concat(
    var.dd_env_vars,
    [
      {
        name  = "ECS_FARGATE"
        value = "true"
      },
      {
        name  = "DD_APM_ENABLED"
        value = var.dd_apm_enabled
      }
    ]
  )
}

resource "aws_cloudwatch_log_group" "main" {
  name = "/ecs/${local.name}"
  tags = var.common_tags
}

resource "aws_ecs_task_definition" "main" {
  family                   = var.task_family
  task_role_arn            = var.task_role_arn
  execution_role_arn       = var.task_exec_role_arn
  network_mode             = "awsvpc"
  requires_compatibilities = ["FARGATE"]
  cpu                      = var.cpu
  memory                   = var.memory
  tags                     = var.common_tags

  container_definitions = templatefile(
    "${path.module}/${var.containers_template}",
    {
      region            = var.region
      log_group         = aws_cloudwatch_log_group.main.name
      container_name    = var.project
      docker_image      = var.image
      secrets           = var.secrets
      port_mapping      = local.port_mapping
      env_vars          = jsonencode(local.env_vars)
      dd_env_vars       = jsonencode(local.dd_env_vars)
      dd_log_group      = var.dd_log_group_name
      dd_api_key_secret = var.dd_api_key_secret
      dd_docker_image   = var.dd_docker_image
      extra_hosts       = "null"
    }
  )

  lifecycle {
    create_before_destroy = true
  }
}
