locals {
  split_synchronize_secrets = [
    "SPLIT_SYNC_API_KEY",
  ]

  split_synchronize_secrets_mapping = [
    for k, v in aws_secretsmanager_secret.split_synchronize_secret :
    {
      name      = k,
      valueFrom = "arn:aws:secretsmanager:${var.aws_region_id}:${local.account_id}:secret:${v["name"]}"
    }
  ]
}

data "aws_ecr_repository" "split_syncronize_ecr" {
  name = "split-synchronizer"

  provider = aws.gdb-infra-dev
}


resource "aws_secretsmanager_secret" "split_synchronize_secret" {
  for_each = toset(local.split_synchronize_secrets)

  name       = "${local.secrets_name_prefix}/split_synchronize/${each.value}"
  kms_key_id = data.aws_kms_key.secrets_general_key.id

  tags = merge(
    local.common_tags,
    {
      project                  = "Infrastructure",
      service                  = "Secrets Manager",
      plat_env_project_service = "${local.aggregated_tag}_INFRA_SCRT"
    }
  )
}

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

  env_prefix      = local.env_prefix
  project_group   = local.project_group
  family          = "${local.env_prefix}-${local.project_group}-split_synchronize"
  container_name  = "split_synchronize"
  container_image = "${data.aws_ecr_repository.split_syncronize_ecr.repository_url}:5.0.2"
  cpu             = 512
  memory          = 1024

  awslogs_retention = module.cloudwatch_logs_retention_by_env[local.env_prefix]

  task_role_arn = data.aws_iam_role.standard_exec.arn
  exec_role_arn = data.aws_iam_role.standard_exec.arn

  secrets = local.split_synchronize_secrets_mapping
  env_vars = [
    {
      name  = "ENVIRONMENT",
      value = local.environment
    },
    {
      name  = "SPLIT_SYNC_REDIS_HOST",
      value = data.aws_elasticache_cluster.main.cache_nodes.0.address
    },
    {
      name  = "SPLIT_SYNC_REDIS_PORT",
      value = 6379
    },
    {
      name  = "SPLIT_SYNC_REDIS_DB",
      value = 1
    },
    {
      name  = "SPLIT_SYNC_REDIS_PREFIX",
      value = "split"
    },
  ]

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Portal",
      service                  = "ECS",
      plat_env_project_service = "${local.aggregated_tag}_PRL_ECS"
    }
  )
}

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

  env_prefix    = local.env_prefix
  project       = "split_synchronize"
  project_group = local.project_group

  cluster_arn   = data.aws_ecs_cluster.main.arn
  desired_count = 1
  max_percent   = 100
  min_percent   = 0

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

  task_definition_arn = module.split_synchronize_task_def.arn

  enable_ecs_managed_tags = true

  capacity_provider_strategy = {
    a = {
      base              = 1
      weight            = 2
      capacity_provider = "FARGATE_SPOT"
    },
    b = {
      base              = 0
      weight            = 1
      capacity_provider = "FARGATE"
    },
  }

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Portal",
      service                  = "ECS",
      plat_env_project_service = "${local.aggregated_tag}_PRL_ECS",
      service_name             = "apollo-split-synchronize"
    }
  )
}
