locals {
  filtr_secrets_list = [
    "DEEZER_CLIENT_SECRET",
    "SESSION_SECRET",
    "SPOTIFY_CLIENT_SECRET",
  ]

  filtr_secrets_mapping = [
    for secret in aws_secretsmanager_secret.filtr_secret :
    {
      name      = element(split("/", secret["name"]), 3),
      valueFrom = "arn:aws:secretsmanager:${var.aws_region_id}:${local.account_id}:secret:${secret["name"]}"
    }
  ]

  filtr_env_vars = [
    {
      name  = "APP_ENV",
      value = local.environment
    },
    {
      name  = "DEBUG",
      value = "filtr*"
    },
    {
      name  = "DEEZER_CLIENT_ID",
      value = "152081"
    },
    {
      name  = "DEEZER_REDIRECT_URI",
      value = "https://dev.filtr.com/deezer-auth/callback"
    },
    {
      name  = "NODE_ENV",
      value = "development"
    },
    {
      name  = "PORT",
      value = "8080"
    },
    {
      name  = "REDIS_URL",
      value = "redis://dev-apollo-www-cache.ir7ind.0001.use1.cache.amazonaws.com:6379"
    },
    {
      name  = "SPOTIFY_CLIENT_ID",
      value = "db510d6475dd47dcac6639aed613a2f2"
    },
    {
      name  = "SPOTIFY_REDIRECT_URI",
      value = "https://dev.filtr.com/spotify-auth/callback"
    },
    {
      name  = "GA_TRACKING_ID",
      value = "UA-44868215-3"
    }
  ]
}

data "aws_ecr_repository" "filtr_www_ecr" {
  name     = "filtr-www"
  provider = aws.gdb-delphi-dev-eu-west-1
}

resource "aws_secretsmanager_secret" "filtr_secret" {
  for_each = toset(local.filtr_secrets_list)

  name       = "${local.secrets_name_prefix}/filtr/${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 "filtr_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}-filtr"
  container_name  = "filtr"
  container_image = "${data.aws_ecr_repository.filtr_www_ecr.repository_url}:cc9064b9272f97c6b2cc94f16a5602d3d1223f9f"
  cpu             = 1024
  memory          = 2048

  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

  env_vars = local.filtr_env_vars
  secrets  = local.filtr_secrets_mapping

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

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

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

  env_prefix    = local.env_prefix
  project       = "filtr"
  project_group = local.project_group

  cluster_arn   = data.aws_ecs_cluster.main.arn
  desired_count = 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.filtr_task_def.arn

  alb_enabled             = true
  https_listener_arn      = data.aws_lb_listener.external_https_listener.arn
  tg_health_check_path    = "/_health"
  tg_health_check_matcher = "200"
  container_port          = 8080
  url                     = module.domains[local.env_prefix]["filtr"]

  enable_ecs_managed_tags = true

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

resource "aws_route53_record" "filtr_api_record" {
  zone_id = data.aws_route53_zone.filtr_com_zone.zone_id
  name    = module.domains[local.env_prefix]["filtr"]
  type    = "A"

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

  provider = aws.gdb-delphi-dev
}
