/* data "aws_iam_role" "api_role" {
  name = "${local.name_prefix}-api_role"
}

data "aws_ecr_repository" "api_service_java" {
  name = "delphi/api-service-java"
}

data "aws_ecr_repository" "cache_nginx" {
  name = "delphi/api-service-nginx-cache"
} */

locals {
  // env specific vars
  auth0_domain       = var.env_prefix == "prod" ? "prod-delphi.auth0.com" : "dev-delphi.auth0.com"
  auth0_api_audience = var.env_prefix == "prod" ? "delphi-api" : "dev-delphi-api"

  # dev uses qa bigtable
  bigtable_project_id = var.env_prefix == "dev" ? "delphi-qa" : "delphi-${var.env_prefix}"
  bigtable_instance_id = {
    "dev"   = "qa-delphi-consumer-analytics-hdd"
    "qa"    = "qa-delphi-consumer-analytics-hdd"
    "stage" = "stg-delphi-consumer-analytics-hdd"
    "prod"  = "delphi-consumer-analytics-hdd"
  }

  db_secret = var.env_prefix == "dev" ? "delphi/qa/api/db_params" : "${local.secrets_name_prefix}/api/db_params"
  api_env_default_vars = {
    "ENVIRONMENT"              = "${var.env_prefix}${local.env_suffix}"
    "AUTH0_DOMAIN"             = local.auth0_domain
    "AUTH0_API_AUDIENCE"       = local.auth0_api_audience
    "BIGTABLE_INSTANCE_ID"     = local.bigtable_instance_id[var.env_prefix]
    "BIGTABLE_APP_PROFILE_ID"  = "default"
    "BIGTABLE_PROJECT_ID"      = local.bigtable_project_id
    "CLIENTS_LIST_SECRET_NAME" = "${local.secrets_name_prefix}/delphi-api/clients_list"
    "AWS_GCP_SECRET_NAME"      = "${local.secrets_name_prefix}/gcp/external-bigtable-reader"
    #"ENABLE_FAKE_DATA" = "false" needs to be added for stage/prod
    "MAIN_DATABASE_SECRET_NAME" = local.db_secret
    "ATLAS_HOST"                = "https://images-api.atlas.stream/v2"
    "ELASTICSEARCH_HOST"        = data.aws_elasticsearch_domain.search.endpoint
    "YT_IMAGE_HOST"             = "https://i.ytimg.com"
  }
  api_env             = merge(local.api_env_default_vars, var.api_env)
  api_env_transformed = [for k, v in local.api_env : { "name" = k, "value" = v }]

  api_secrets_transformed = [for k, v in var.api_secrets : { "name" = k, "valueFrom" = v }]
}

module "api_task_def" {
  source = "../../../modules/ecs/tasks/fargate_v3"

  env_prefix      = var.env_prefix
  project_group   = var.project_group
  family          = "${var.env_prefix}-${var.project_group}-api${local.env_suffix}"
  container_name  = "api${local.env_suffix}"
  container_image = "${var.api_repo_url}:${local.api_image_tag}"
  cpu             = var.api_cpu    #default 4096
  memory          = var.api_memory #default 8192

  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.api_env_transformed
  secrets  = local.api_secrets_transformed

  datadog_enabled    = var.api_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"
  dd_env             = "${var.env_prefix}${local.env_suffix}"

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

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

  common_tags = var.tags
}

module "api_service" {
  source = "../../../modules/ecs/services/service_taskless_v3"

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

  cluster_arn   = data.aws_ecs_cluster.main.arn
  desired_count = var.default_task_count

  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.api_task_def.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          = 8000
  url                     = local.api_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
}

