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

  mapping_template = [
    {
      hostPort      = var.container_port
      protocol      = "tcp"
      containerPort = var.container_port
    }
  ]

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

  env_vars = concat(
    var.env_vars,
    [
      {
        name  = "DATADOG_TRACE_ENABLED",
        value = "false"
      },
      {
        name  = "DD_LOGS_INJECTION",
        value = "false"
      }
    ]
  )
}

module "ecs-container-definition" {
  source  = "cloudposse/ecs-container-definition/aws"
  version = "0.45.2"

  container_name  = var.project
  container_image = var.image
  port_mappings   = local.port_mapping
  environment     = local.env_vars
  secrets         = var.secrets
  command         = var.command
  log_configuration = {
    logDriver = "awslogs"
    options = {
      "awslogs-group"         = aws_cloudwatch_log_group.main.name
      "awslogs-region"        = var.region
      "awslogs-stream-prefix" = "ecs"
    }
    secretOptions = null
  }
}


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

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 = module.ecs-container-definition.json_map_encoded_list

  lifecycle {
    create_before_destroy = true
  }
}
