
locals {
  dd_service = var.dd_service == "" ? "${var.project_group}-${var.container_name}" : var.dd_service
  dd_env     = var.dd_env == "" ? var.env_prefix : var.dd_env
  default_vars = [
    {
      name  = "DATADOG_TRACE_ENABLED",
      value = false
    },
    {
      name  = "DD_TRACE_ENABLED",
      value = false
    },
    {
      name  = "DD_LOGS_INJECTION",
      value = false
    },
  ]

  env_vars_for_dd = [
    {
      name : "DD_SERVICE",
      value : local.dd_service
    },
    {
      name  = "DD_ENV",
      value = local.dd_env
    },
    {
      name  = "DATADOG_TRACE_ENABLED",
      value = var.dd_apm_enabled
    },
    {
      name  = "DD_TRACE_ENABLED",
      value = var.dd_apm_enabled
    },
    {
      name  = "DD_PROFILING_ENABLED",
      value = var.dd_profiling_enabled
    },
    {
      name  = "DD_LOGS_INJECTION",
      value = var.dd_logs_injection
    },
    {
      name  = "DATADOG_SERVICE_NAME",
      value = local.dd_service
    },
  ]

  env_vars_for_defender = [
    {
      name  = "TW_IMAGE_NAME",
      value = var.container_image
    },
    {
      name  = "TW_CONTAINER_NAME",
      value = var.container_name
    },
    {
      name  = "DEFENDER_TYPE",
      value = "fargate"
    },
    {
      name  = "FARGATE_TASK",
      value = var.family
    },
  ]

  dd_env_vars_for_defender = [
    {
      name  = "TW_IMAGE_NAME",
      value = var.dd_container_image
    },
    {
      name  = "TW_CONTAINER_NAME",
      value = var.dd_container_name
    },
    {
      name  = "DEFENDER_TYPE",
      value = "fargate"
    },
    {
      name  = "FARGATE_TASK",
      value = var.family
    },
  ]

  env_vars_cond1 = var.datadog_enabled && var.defender_enabled ? concat(var.env_vars, local.env_vars_for_dd, local.env_vars_for_defender) : []
  env_vars_cond2 = var.datadog_enabled && !var.defender_enabled ? concat(var.env_vars, local.env_vars_for_dd) : []
  env_vars_cond3 = !var.datadog_enabled && var.defender_enabled ? concat(var.env_vars, local.default_vars, local.env_vars_for_defender) : []
  env_vars_cond4 = !var.datadog_enabled && !var.defender_enabled ? concat(var.env_vars, local.default_vars) : []

  env_vars = length(local.env_vars_cond1) != 0 || length(local.env_vars_cond2) != 0 || length(local.env_vars_cond3) != 0 || length(local.env_vars_cond4) != 0 ? coalescelist(local.env_vars_cond1, local.env_vars_cond2, local.env_vars_cond3, local.env_vars_cond4) : []

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

  dd_env_vars = var.defender_enabled ? concat(
    local.default_dd_env_vars,
    local.dd_env_vars_for_defender,
  ) : local.default_dd_env_vars

  containers = var.datadog_enabled ? [
    { name = var.container_name, image = var.container_image },
    { name = var.dd_container_name, image = var.dd_container_image },
    ] : [
    { name = var.container_name, image = var.container_image },
  ]

  container_definitions_cond1 = var.datadog_enabled && var.defender_enabled ? "[${module.main.json_map_encoded},${join("", module.datadog.*.json_map_encoded)},${join("", module.defender.*.json_map_encoded)}]" : ""
  container_definitions_cond2 = var.datadog_enabled && !var.defender_enabled ? "[${module.main.json_map_encoded},${join("", module.datadog.*.json_map_encoded)}]" : ""
  container_definitions_cond3 = !var.datadog_enabled && var.defender_enabled ? "[${module.main.json_map_encoded},${join("", module.defender.*.json_map_encoded)}]" : ""

  container_definitions = coalesce(
    local.container_definitions_cond1,
    local.container_definitions_cond2,
    local.container_definitions_cond3,
    module.main.json_map_encoded_list
  )

  awslogs_group_name = var.awslogs_group_name != "" ? var.awslogs_group_name : "/ecs/${var.env_prefix}-${var.project_group}-${var.container_name}"

  efs_volume_enabled = var.efs_volume_enabled ? ["Enabled"] : []

  ephemeral_storage_enabled = var.ephemeral_storage_size > 20 ? ["Enabled"] : []

  dd_docker_labels = merge({
    "com.datadoghq.tags.env"     = local.dd_env,
    "com.datadoghq.tags.service" = local.dd_service
  }, var.dd_docker_labels)

  defender_entrypoint = [
    "/var/lib/twistlock/fargate/fargate_defender.sh",
    "fargate",
    "entrypoint"
  ]
  entrypoint_cond1 = var.defender_enabled && var.entrypoint != null ? concat(local.defender_entrypoint, var.entrypoint) : []
  entrypoint_cond2 = var.defender_enabled && var.entrypoint == null ? local.defender_entrypoint : []

  entrypoint = length(local.entrypoint_cond1) != 0 || length(local.entrypoint_cond2) != 0 || var.entrypoint != null ? coalescelist(local.entrypoint_cond1, local.entrypoint_cond2, var.entrypoint) : var.entrypoint

  mount_points = var.defender_enabled ? concat(var.mount_points, [
    {
      containerPath = "/var/lib/twistlock/fargate/policy"
      readOnly      = true
      sourceVolume  = "tw_policy"
    }
  ]) : var.mount_points

  volumes_from = var.defender_enabled ? concat(var.volumes_from, [
    {
      readOnly        = false
      sourceContainer = "TwistlockDefender"
    }
  ]) : var.volumes_from

  defender_volumes = var.defender_enabled ? ["Enabled"] : []

  dd_entrypoint = var.defender_enabled ? concat(local.defender_entrypoint, ["/init"]) : null
}
