# Transformation service
data "aws_ecr_repository" "dapd_api_scraper" {
  provider = aws.gdb-delphi-dev
  name     = "delphi/dapd-api-scraper"
}

module "dapd_api_scraper_role" {
  source              = "../../../modules/iam/roles/ecs_task_role"
  enable_default_role = false
  name_prefix         = local.name_prefix
  name                = "dapd_api_scraper_role"
  common_tags = merge(
    local.common_tags,
    {
      project                  = "Public Data",
      service                  = "ECS",
      plat_env_project_service = "${local.aggregated_tag}_PD_ECS"
    }
  )
  policies_list = [
    module.iam_map.s3_env_rw.arn,
    module.iam_map.kinesis_producer.arn,
    data.aws_iam_policy.logging.arn,
    data.aws_iam_policy.secrets-services-ro.arn,
  ]
}

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

  env_prefix      = local.env_prefix
  project_group   = local.project_group
  family          = "${local.name_prefix}-dapd-api-scraper-1"
  container_name  = "dapd-api-scraper"
  container_image = "${data.aws_ecr_repository.dapd_api_scraper.repository_url}:${local.docker_image_env_tag[var.platform.prefix]}"
  cpu             = 2048
  memory          = 4096

  stop_timeout = 120

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

  healthcheck = {
    command     = ["CMD-SHELL", "python3 healthcheck.py"]
    retries     = 3
    timeout     = 30
    interval    = 300
    startPeriod = 60
  }

  env_vars = [
    {
      name  = "ENVIRONMENT",
      value = var.platform.prefix
    },
    {
      name  = "SPOTIFY_CREDENTIALS"
      value = "${local.project_group}/${local.env_prefix}/apd/spotify_400"
    },
    {
      name  = "APPLE_MUSIC_CREDENTIALS"
      value = "${local.project_group}/${local.env_prefix}/apd/apple-music"
    },
    {
      name  = "WORKFLOWDB_SECRET_NAME"
      value = "${local.project_group}/${local.env_prefix}/workflowdb/pg/user"
    },
    {
      name  = "ETLDB_SECRET_NAME"
      value = "${local.project_group}/${local.env_prefix}/pd_etldb/pg/user"
    },
    {
      name  = "AWS_DEFAULT_REGION"
      value = "us-east-1"
    },
    {
      name  = "ECS_CLUSTER",
      value = data.aws_ecs_cluster.main.cluster_name
    },
    {
      name  = "PROJECT",
      value = local.project_group
    },
    {
      name  = "ECS_SERVICE",
      value = "dapd-api-scraper-1"
    },
    {
      name  = "RAW_BUCKET",
      value = "${local.name_prefix}-public-data-raw"
    },
    {
      name  = "STORE_RAW",
      value = "False"
    },
    {
      name  = "ENTITIES",
      value = "SpotifyPlaylist"
    },
    {
      name  = "spotify_playlist_threads_count",
      value = "30"
    },
  ]

  secrets = [
    {
      name      = "SENTRY_SECRET_KEY"
      valueFrom = "${aws_secretsmanager_secret.common_env_secrets["sentry_config"].arn}:dapd_api_scraper::"
    },
    {
      name      = "DD_API_KEY",
      valueFrom = aws_secretsmanager_secret.common_env_secrets["common/DD_API_KEY"].arn
    }
  ]

  datadog_enabled      = true
  dd_apm_enabled       = true
  dd_logs_injection    = true
  dd_container_image   = "public.ecr.aws/datadog/agent:latest"
  dd_awslogs_group     = aws_cloudwatch_log_group.datadog-agent.name
  dd_profiling_enabled = true

  dd_docker_labels = {
    "com.datadoghq.tags.service"          = "${local.project_group}-dapd-api-scraper",
    "com.datadoghq.tags.service_entities" = "SpotifyPlaylist",
  }

  dd_env_vars = [{
    "name" : "DD_DOCKER_LABELS_AS_TAGS",
    "value" : "{\"com.datadoghq.tags.service_entities\":\"service_entities\"}"
  }]

  dd_secrets = [{
    name      = "DD_API_KEY",
    valueFrom = aws_secretsmanager_secret.common_env_secrets["common/DD_API_KEY"].arn
  }]

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Public Data",
      service                  = "ECS",
      plat_env_project_service = "${local.aggregated_tag}_PD_ECS"
    }
  )
}

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

  env_prefix    = local.env_prefix
  project       = "dapd-api-scraper-1"
  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.dapd_api_scraper_1_task_def.arn

  alb_enabled             = false
  min_percent             = 0
  max_percent             = 100
  enable_ecs_managed_tags = true

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Public Data",
      service                  = "ECS",
      plat_env_project_service = "${local.aggregated_tag}_PD_ECS"
    }
  )
}

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

  env_prefix      = local.env_prefix
  project_group   = local.project_group
  family          = "${local.name_prefix}-dapd-api-scraper-2"
  container_name  = "dapd-api-scraper"
  container_image = "${data.aws_ecr_repository.dapd_api_scraper.repository_url}:${local.docker_image_env_tag[var.platform.prefix]}"
  cpu             = 2048
  memory          = 4096

  awslogs_create_group = false

  stop_timeout = 120

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

  healthcheck = {
    command     = ["CMD-SHELL", "python3 healthcheck.py"]
    retries     = 3
    timeout     = 30
    interval    = 300
    startPeriod = 60
  }

  env_vars = [
    {
      name  = "ENVIRONMENT",
      value = var.platform.prefix
    },
    {
      name  = "SPOTIFY_CREDENTIALS"
      value = "${local.project_group}/${local.env_prefix}/apd/spotify_400"
    },
    {
      name  = "APPLE_MUSIC_CREDENTIALS"
      value = "${local.project_group}/${local.env_prefix}/apd/apple-music"
    },
    {
      name  = "WORKFLOWDB_SECRET_NAME"
      value = "${local.project_group}/${local.env_prefix}/workflowdb/pg/user"
    },
    {
      name  = "ETLDB_SECRET_NAME"
      value = "${local.project_group}/${local.env_prefix}/pd_etldb/pg/user"
    },
    {
      name  = "AWS_DEFAULT_REGION"
      value = "us-east-1"
    },
    {
      name  = "ECS_CLUSTER",
      value = data.aws_ecs_cluster.main.cluster_name
    },
    {
      name  = "PROJECT",
      value = local.project_group
    },
    {
      name  = "ECS_SERVICE",
      value = "dapd-api-scraper-2"
    },
    {
      name  = "RAW_BUCKET",
      value = "${local.name_prefix}-public-data-raw"
    },
    {
      name  = "STORE_RAW",
      value = "False"
    },
    {
      name  = "ENTITIES",
      value = "SpotifyTrack,SpotifyArtist,SpotifyAlbum,AppleMusicPlaylist,AppleMusicTrack,AppleMusicArtist,AppleMusicAlbum"
    },
    {
      name  = "apple_music_album_threads_count",
      value = "2"
    },
    {
      name  = "apple_music_album_chunk_size",
      value = "50"
    },
    {
      name  = "apple_music_playlist_chunk_size",
      value = "10"
    },
    {
      name  = "apple_music_playlist_threads_count",
      value = "8"
    },
  ]

  secrets = [
    {
      name      = "SENTRY_SECRET_KEY"
      valueFrom = "${aws_secretsmanager_secret.common_env_secrets["sentry_config"].arn}:dapd_api_scraper::"
    },
    {
      name      = "DD_API_KEY",
      valueFrom = aws_secretsmanager_secret.common_env_secrets["common/DD_API_KEY"].arn
    }
  ]

  datadog_enabled      = true
  dd_apm_enabled       = true
  dd_logs_injection    = true
  dd_container_image   = "public.ecr.aws/datadog/agent:latest"
  dd_awslogs_group     = aws_cloudwatch_log_group.datadog-agent.name
  dd_profiling_enabled = true

  dd_docker_labels = {
    "com.datadoghq.tags.service"          = "${local.project_group}-dapd-api-scraper",
    "com.datadoghq.tags.service_entities" = "SpotifyTrack,SpotifyArtist,SpotifyAlbum,AppleMusicPlaylist,AppleMusicTrack,AppleMusicArtist,AppleMusicAlbum",
  }

  dd_env_vars = [{
    "name" : "DD_DOCKER_LABELS_AS_TAGS",
    "value" : "{\"com.datadoghq.tags.service_entities\":\"service_entities\"}"
  }]

  dd_secrets = [{
    name      = "DD_API_KEY",
    valueFrom = aws_secretsmanager_secret.common_env_secrets["common/DD_API_KEY"].arn
  }]

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Public Data",
      service                  = "ECS",
      plat_env_project_service = "${local.aggregated_tag}_PD_ECS"
    }
  )
}

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

  env_prefix    = local.env_prefix
  project       = "dapd-api-scraper-2"
  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.dapd_api_scraper_2_task_def.arn

  alb_enabled             = false
  min_percent             = 0
  max_percent             = 100
  enable_ecs_managed_tags = true

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Public Data",
      service                  = "ECS",
      plat_env_project_service = "${local.aggregated_tag}_PD_ECS"
    }
  )
}
