locals {
  licensors = {
    sony = {
      cpu    = 16384
      memory = 122880
    },
    theorchard = {
      cpu    = 16384
      memory = 122880
    },
    smej = {
      cpu    = 16384
      memory = 65536
    },
    smejintl = {
      cpu    = 2048
      memory = 16384
    }
  }
}

data "aws_ecr_repository" "consumeranalytics_job_ecr" {
  name = "${local.project_group}-etl/go-apollo"

  provider = aws.gdb-delphi-dev
}

resource "aws_cloudwatch_log_group" "spotifyconsumeranalytics_log_group" {
  for_each = local.licensors

  name              = "/ecs/${local.name_prefix}-spotifyconsumeranalytics-${each.key}"
  retention_in_days = module.cloudwatch_logs_retention_by_env[local.env_prefix]

  tags = merge(
    local.common_tags,
    {
      project                  = "ETL",
      service                  = "CloudWatch",
      plat_env_project_service = "${local.aggregated_tag}_ETL_CW"
    }
  )
}

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

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

  policies_list = [
    data.aws_iam_policy.logging_policy.arn,
    data.aws_iam_policy.s3_aggregated_stream_reports_rw.arn,
    data.aws_iam_policy.s3_delphi_dataarchive_ro.arn,
  ]

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

module "spotifyconsumeranalytics_task_def" {
  for_each = local.licensors

  source = "../../../modules/ecs/tasks/fargate_v3"

  env_prefix      = local.env_prefix
  project_group   = local.project_group
  family          = "${local.env_prefix}-${local.project_group}-spotifyconsumeranalytics-${each.key}"
  container_name  = "spotifyconsumeranalytics"
  container_image = "${data.aws_ecr_repository.consumeranalytics_job_ecr.repository_url}:spotify"
  cpu             = lookup(each.value, "cpu", 16384)
  memory          = lookup(each.value, "memory", 122880)

  awslogs_create_group = false
  awslogs_group_name   = aws_cloudwatch_log_group.spotifyconsumeranalytics_log_group[each.key].name

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

  env_vars = [
    {
      name  = "AWS_SOURCE_REGION",
      value = "us-east-1"
    },
    {
      name  = "AWS_TARGET_REGION",
      value = "eu-west-1"
    },
    {
      name  = "AWS_SOURCE_BUCKET",
      value = "sme-data-archive"
    },
    {
      name  = "AWS_TARGET_BUCKET",
      value = "sme-aggregated-stream-reports"
    },
    {
      name  = "ENVIRONMENT",
      value = local.environment
    },
    {
      name  = "ECS_CLUSTER"
      value = data.aws_ecs_cluster.etl.cluster_name
    },
    {
      name  = "PROJECT",
      value = local.project_group
    },
  ]

  secrets = [
    {
      name      = "DD_API_KEY"
      valueFrom = aws_secretsmanager_secret.common_secret["DD_API_KEY"].arn
    },
  ]

  docker_labels = {
    "traefik.enable" = "false"
  }

  command = ["-report=streams", "-licensor=${each.key}"]

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

resource "aws_cloudwatch_log_group" "appleconsumeranalytics_log_group" {
  name              = "/ecs/${local.name_prefix}-appleconsumeranalytics"
  retention_in_days = module.cloudwatch_logs_retention_by_env[local.env_prefix]

  tags = merge(
    local.common_tags,
    {
      project                  = "ETL",
      service                  = "CloudWatch",
      plat_env_project_service = "${local.aggregated_tag}_ETL_CW"
    }
  )
}

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

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

  policies_list = [
    data.aws_iam_policy.logging_policy.arn,
    data.aws_iam_policy.s3_aggregated_stream_reports_rw.arn,
    data.aws_iam_policy.s3_delphi_dataarchive_ro.arn,
  ]

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

module "appleconsumeranalytics_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}-appleconsumeranalytics"
  container_name  = "appleconsumeranalytics"
  container_image = "${data.aws_ecr_repository.consumeranalytics_job_ecr.repository_url}:apple"
  cpu             = 2048
  memory          = 4096

  awslogs_create_group = false
  awslogs_group_name   = aws_cloudwatch_log_group.appleconsumeranalytics_log_group.name

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

  env_vars = [
    {
      name  = "AWS_SOURCE_REGION",
      value = "us-east-1"
    },
    {
      name  = "AWS_TARGET_REGION",
      value = "eu-west-1"
    },
    {
      name  = "AWS_SOURCE_BUCKET",
      value = "sme-data-archive"
    },
    {
      name  = "AWS_TARGET_BUCKET",
      value = "sme-aggregated-stream-reports"
    },
    {
      name  = "ENVIRONMENT",
      value = local.environment
    },
    {
      name  = "ECS_CLUSTER"
      value = data.aws_ecs_cluster.etl.cluster_name
    },
    {
      name  = "PROJECT",
      value = local.project_group
    },
  ]

  secrets = [
    {
      name      = "DD_API_KEY"
      valueFrom = aws_secretsmanager_secret.common_secret["DD_API_KEY"].arn
    },
  ]

  docker_labels = {
    "traefik.enable" = "false"
  }

  command = [
    "-report=streams",
  ]

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

