locals {
  nginx_enabled = toset(var.nginx_enabled ? ["nginx"] : [])
  nginx_env_default_vars = {
    "DNS_SERVER"           = cidrhost(data.aws_vpc.main.cidr_block, 2)
    "HEALTHCHECK_PATH"     = "/health"
    "ACCESS_LOG_STATUS"    = "/var/log/nginx/access.log json_custom"
    "BACKEND_ADDRESS"      = local.api_dns
    "DD_ENABLED"           = var.nginx_datadog_enabled ? "TRUE" : "FALSE"
    "PROXY_CACHE_INACTIVE" = "15m"
  }
  nginx_env             = merge(local.nginx_env_default_vars, var.nginx_env)
  nginx_env_transformed = [for k, v in local.nginx_env : { "name" = k, "value" = v }]
}

module "cache_api_task_def" {
  for_each = local.nginx_enabled
  source   = "../../../modules/ecs/tasks/fargate_v3"

  env_prefix      = var.env_prefix
  project_group   = var.project_group
  family          = "${local.name_prefix}-api-nginx${local.env_suffix}"
  container_name  = "api-nginx${local.env_suffix}"
  container_image = "${var.nginx_repo_url}:${local.nginx_image_tag}"
  cpu             = var.nginx_cpu    # default 1024
  memory          = var.nginx_memory # default 4096

  init_process_enabled = var.init_process_enabled

  task_role_arn = var.api_role_arn
  exec_role_arn = data.aws_iam_role.exec_role.arn

  env_vars = local.nginx_env_transformed

  datadog_enabled    = var.nginx_datadog_enabled
  dd_apm_enabled     = true
  dd_logs_injection  = true
  dd_container_image = "public.ecr.aws/datadog/agent:latest-jmx"
  dd_awslogs_group   = data.aws_cloudwatch_log_group.datadog_agent.name
  dd_service         = "delphi-api-nginx"
  dd_env             = "${var.env_prefix}${local.env_suffix}"

  dd_secrets = [{
    name      = "DD_API_KEY",
    valueFrom = data.aws_secretsmanager_secret.dd_api_key.arn
  }]

  ulimits = [
    {
      name      = "nofile"
      hardLimit = 65536
      softLimit = 65536
    }
  ]

  port_mappings = [{
    containerPort = 80
    hostPort      = 80
    protocol      = "tcp"
  }]

  common_tags = var.tags
}

module "cache_api_service" {
  source   = "../../../modules/ecs/services/service_taskless_v3"
  for_each = local.nginx_enabled

  env_prefix    = var.env_prefix
  project       = "api-nginx${local.env_suffix}"
  project_group = var.project_group

  cluster_arn   = data.aws_ecs_cluster.main.arn
  desired_count = 1

  security_groups = [data.aws_security_group.main.id]
  subnets         = data.aws_subnets.private_subnets.ids
  vpc_id          = data.aws_vpc.main.id

  capacity_provider_strategy = {
    "FARGATE" = {
      base              = 1
      capacity_provider = "FARGATE"
      weight            = 1
    }
  }

  task_definition_arn = module.cache_api_task_def[each.value].arn

  alb_enabled             = true
  https_listener_arn      = data.aws_lb_listener.https_listener.arn
  tg_health_check_path    = "/health"
  tg_health_check_matcher = "200"
  container_port          = 80
  url                     = local.nginx_dns

  sd_enabled   = var.sd_namespace_id != ""
  namespace_id = var.sd_namespace_id

  enable_ecs_managed_tags = true
  enable_execute_command  = var.enable_execute_command

  common_tags = var.tags
}
