resource "aws_ecs_cluster" "this" {
  name = "${local.name_prefix}-ec2-poc"

  setting {
    name  = "containerInsights"
    value = "enabled"
  }
}

resource "aws_ecs_capacity_provider" "this" {
  name = "${local.name_prefix}-ec2-poc"

  auto_scaling_group_provider {
    auto_scaling_group_arn         = aws_autoscaling_group.this.arn
    managed_termination_protection = "ENABLED"

    managed_scaling {
      maximum_scaling_step_size = 2
      minimum_scaling_step_size = 1
      status                    = "ENABLED"
      target_capacity           = 1
    }
  }
}

resource "aws_ecs_cluster_capacity_providers" "this" {
  cluster_name  = aws_ecs_cluster.this.name

  capacity_providers = [aws_ecs_capacity_provider.this.name]

  default_capacity_provider_strategy {
    base              = 1
    weight            = 100
    capacity_provider = aws_ecs_capacity_provider.this.name
  }
}

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

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

  stop_timeout = 120

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

  env_vars = [
    {
      name  = "ENVIRONMENT",
      value = var.env_prefix
    },
    {
      name  = "SPOTIFY_CREDENTIALS"
      value = "${local.secrets_name_prefix}/apd/spotify"
    },
    {
      name  = "APPLE_MUSIC_CREDENTIALS"
      value = "${local.secrets_name_prefix}/apd/apple-music"
    },
    {
      name  = "WORKFLOWDB_SECRET_NAME"
      value = "${local.secrets_name_prefix}/workflowdb/pg/user"
    },
    {
      name  = "ETLDB_SECRET_NAME"
      value = "${local.secrets_name_prefix}/pd_etldb/pg/user"
    },
    {
      name  = "AWS_DEFAULT_REGION"
      value = "us-east-1"
    },
    {
      name  = "ECS_CLUSTER",
      value = aws_ecs_cluster.this.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"
    },
  ]

  secrets = [
    {
      name      = "SENTRY_SECRET_KEY"
      valueFrom = "${data.aws_secretsmanager_secret.sentry_config.arn}:dapd_api_scraper::"
    },
    {
      name      = "DD_API_KEY",
      valueFrom = data.aws_secretsmanager_secret.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     = data.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 = data.aws_secretsmanager_secret.dd_api_key.arn
  }]

  common_tags = {
    service                  = "ECS",
    plat_env_project_service = "${local.aggregated_tag}_ECS"
  }
}

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

  env_prefix    = var.env_prefix
  project       = "dapd-api-scraper-1-poc"
  project_group = local.project_group

  cluster_arn   = aws_ecs_cluster.this.arn
  launch_type   = "EC2"
  desired_count = 1

  security_groups = [data.aws_security_group.ecs.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 = {
    service                  = "ECS",
    plat_env_project_service = "${local.aggregated_tag}_ECS"
  }
}
