locals {
  new_music_friday_tracks_secrets = [
    "SENTRY_DSN",
  ]

  new_music_friday_tracks_common_secrets = {
    DD_API_KEY     = aws_secretsmanager_secret.common_secret["DD_API_KEY"]
    MYSQL_USER     = aws_secretsmanager_secret.apollo_api_secret["MYSQL_DB_USER"]
    MYSQL_PASSWORD = aws_secretsmanager_secret.apollo_api_secret["MYSQL_DB_PASS"]
    DSPAPI_APPKEY  = aws_secretsmanager_secret.dsp_api_secret["DSPAPI_APPKEY"]
  }

  new_music_friday_tracks_secrets_list = [
    for k, v in merge(aws_secretsmanager_secret.new_music_friday_tracks_secret, local.new_music_friday_tracks_common_secrets) :
    {
      name      = k,
      valueFrom = "arn:aws:secretsmanager:${var.aws_region_id}:${local.account_id}:secret:${v["name"]}"
    }
  ]
}

data "aws_ecr_repository" "new_music_friday_tracks_ecr" {
  name = "${local.project_group}/new-music-friday-tracks-job"
}

resource "aws_secretsmanager_secret" "new_music_friday_tracks_secret" {
  for_each = toset(local.new_music_friday_tracks_secrets)

  name       = "${local.secrets_name_prefix}/new_music_friday_tracks/${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"
    }
  )
}

data "aws_iam_policy" "nmf_event_bus_publisher" {
  arn = "arn:aws:iam::${local.account_id}:policy/${local.name_prefix}-nmf_event_bus_publisher"
}

module "new_music_friday_tracks_ecs_role" {
  source = "../../../modules/iam/roles/ecs_task_role"

  enable_default_role = false
  name_prefix         = local.name_prefix
  name                = "new_music_friday_tracks_role"

  policies_list = [
    data.aws_iam_policy.secrets_services_ro.arn,
    data.aws_iam_policy.logging_policy.arn,
    data.aws_iam_policy.nmf_event_bus_publisher.arn,
  ]

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

module "new_music_friday_tracks" {
  source = "../../../modules/ecs/tasks/scheduled_task_v3"

  env_prefix         = local.env_prefix
  project_group      = local.project_group
  project            = "new_music_friday_tracks"
  region             = var.aws_region_id
  cluster_arn        = data.aws_ecs_cluster.main.arn
  security_groups    = [data.aws_security_group.main.id]
  task_exec_role_arn = data.aws_iam_role.standard_exec.arn
  task_role_arn      = module.new_music_friday_tracks_ecs_role.role.arn
  scheduler_role_arn = data.aws_iam_role.scheduler_role.arn
  subnets            = data.aws_subnets.private_subnets.ids
  secrets            = local.new_music_friday_tracks_secrets_list
  image              = "${data.aws_ecr_repository.new_music_friday_tracks_ecr.repository_url}:${local.docker_image_env_tag[var.platform.prefix]}"
  cpu                = 512
  memory             = 1024

  schedule_expression = {
    thursday = {
      expression = "cron(0/30 13-23 ? * THU *)",
      enabled    = false
    },
    friday = {
      expression = "cron(0/30 * ? * FRI *)",
      enabled    = false
    },
    saturday = {
      expression = "cron(0/30 * ? * SAT *)",
      enabled    = false
    },
    sunday = {
      expression = "cron(0/30 * ? * SUN *)",
      enabled    = false
    },
  }

  env_vars = [
    {
      name  = "ENVIRONMENT",
      value = local.environment
    },
    {
      name  = "MYSQL_DATABASE",
      value = "dbSony_dbo"
    },
    {
      name  = "MYSQL_HOST",
      value = module.domains[local.env_prefix]["main-db-rw"]
    },
    {
      name  = "REDIS_HOST",
      value = data.aws_elasticache_cluster.main.cache_nodes.0.address
    },
    {
      name  = "DSPAPI_HOSTNAME",
      value = module.domains[local.env_prefix]["dsp-api"]
    },
    {
      name  = "AWS_DEFAULT_REGION",
      value = "us-east-1"
    },
    {
      name  = "AWS_EVENT_BUS_NAME"
      value = "${local.name_prefix}-new_music_friday",
    },
    {
      name  = "ECS_CLUSTER"
      value = data.aws_ecs_cluster.main.cluster_name
    },
    {
      name  = "PROJECT",
      value = local.project_group
    },
    {
      name  = "ECS_SERVICE",
      value = "new_music_friday_tracks"
    },
  ]

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