module "slz_admin_role" {
  source              = "../../../modules/iam/roles/ecs_task_role"
  enable_default_role = false
  name_prefix         = local.name_prefix
  name                = "slz_admin_role"
  common_tags = merge(
    local.common_tags,
    {
      project                  = "SLZ",
      service                  = "ECS",
      plat_env_project_service = "${local.aggregated_tag}_SLZ_ECS"
    }
  )
  policies_list = [
    data.aws_iam_policy.secrets-services-ro.arn,
    data.aws_iam_policy.logging.arn,
    module.iam_map.db_rw.arn,
    module.iam_map.sqs_producer.arn,
    module.iam_map.lambda_invoke.arn,
    module.iam_map.s3_env_ro.arn,
    module.iam_map.s3_sme_data_ro.arn,
  ]
}

resource "aws_route53_record" "slz_admin" {
  provider = aws.gdb-delphi-dev
  zone_id  = data.aws_route53_zone.default.id
  name     = "admin.delphiplatform.io"
  type     = "A"

  alias {
    name                   = data.aws_lb.nlb.dns_name
    zone_id                = data.aws_lb.nlb.zone_id
    evaluate_target_health = false
  }
}

module "slz_admin_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}-slz-admin"
  container_name  = "slz-admin"
  container_image = "475275892927.dkr.ecr.us-east-1.amazonaws.com/delphi/slz-admin:${local.docker_image_env_tag[var.platform.prefix]}"
  cpu             = 1024
  memory          = 2048

  task_role_arn = module.slz_admin_role.role.arn
  exec_role_arn = data.aws_iam_role.standard_exec.arn

  env_vars = [
    {
      name  = "ENVIRONMENT",
      value = var.platform.prefix
    },
    {
      name  = "SENTRY_SECRET_KEY",
      value = "delphi/${lower(var.platform.prefix)}/sentry_config"
    },
    {
      name  = "BASE_URL",
      value = "https://admin.delphiplatform.io"
    },
  ]

  #secrets = local.delphi_api_secrets_formatted

  datadog_enabled = false

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

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

module "slz_admin_service" {
  source = "../../../modules/ecs/services/service_taskless_v2"

  env_prefix    = local.env_prefix
  project       = "slz-admin"
  project_group = local.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

  task_definition_arn = module.slz_admin_task_def.arn

  alb_enabled             = true
  https_listener_arn      = data.aws_lb_listener.private_external_https_listener.arn
  tg_health_check_path    = "/health"
  tg_health_check_matcher = "200"
  container_port          = 8000
  url                     = "admin.delphiplatform.io"

  enable_ecs_managed_tags = true

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