locals {
  browserstack_creds_secrets_names_list = [
    "BROWSERSTACK_USERNAME",
    "BROWSERSTACK_ACCESS_KEY",
  ]

  ui_tests_secrets_names_list = [
    "AUTH0_CLIENT_SECRET",
    "MYSQL_DB_PASS",
    "NOTIFICATIONS_PASSWORD",
    "SUPERUSER_PASSWORD",
    "USER_PASSWORD",
    "USER_PASSWORD_PROD",
  ]

  apollo_ui_tests_secrets_names_list = [
    "AUTH0_CLIENT_ID",
    "AUTH0_CLIENT_ID_DELPHI",
    "AUTH0_CLIENT_ID_PROD",
    "AUTH0_CLIENT_SECRET",
    "AUTH0_CLIENT_SECRET_DELPHI",
    "AUTH0_CLIENT_SECRET_PROD",
  ]

  dna_ui_test_dev_secrets = [
    "AUTH0_CLIENT_SECRET",
  ]

  atlas_load_tester_secrets = [
    "ATLAS_CLIENT_SECRET",
    "SENTRY_DSN",
  ]

  delphi_stage_secrets_name_prefix = "infra/jenkins/delphi/stage"
  delphi_stage_secrets = [
    "db_params"
  ]

  delphi_artists_onboarding_secrets = formatlist(
    "infra/jenkins/delphi_artists_onboarding/%s/snowflake",
    ["dev", "qa", "stage", "prod"]
  )

  rti_common_secret_names = [
    "DD_CLIENT_API_KEY",
    "EXPO_ANDROID_KEYSTORE",
    "EXPO_BOT_USER_TOKEN",
    "EXPO_CREDENTIALS_FILE",
    "PERFORMANCE_TEST_CLIENT_SECRET",
    "SENTRY_AUTH_TOKEN",
  ]

  rti_preview_secret_names = [
    "EXPO_APPLE_APP_SPECIFIC_PASSWORD",
    "EXPO_APPLE_APP_SPECIFIC_EMAIL",
  ]
}

resource "aws_secretsmanager_secret" "rti_common_secret" {
  for_each = toset(local.rti_common_secret_names)

  name       = "${local.project_group}/jenkins/rti/common/${each.key}"
  kms_key_id = module.jenkins_kms_secrets_manager.serviceonly_key.key_id

  tags = merge(
    local.common_tags,
    {
      project                  = "Infrastructure",
      service                  = "Secrets Manager",
      plat_env_project_service = "${local.aggregated_tag}_INFRA_SCRT"
    }
  )
}

resource "aws_secretsmanager_secret" "rti_preview_secret" {
  for_each = toset(local.rti_preview_secret_names)

  name       = "${local.project_group}/jenkins/rti/preview/${each.key}"
  kms_key_id = module.jenkins_kms_secrets_manager.serviceonly_key.key_id

  tags = merge(
    local.common_tags,
    {
      project                  = "Infrastructure",
      service                  = "Secrets Manager",
      plat_env_project_service = "${local.aggregated_tag}_INFRA_SCRT"
    }
  )
}

resource "aws_secretsmanager_secret" "browserstack_creds_secret" {
  for_each = toset(local.browserstack_creds_secrets_names_list)

  name       = "${local.project_group}/jenkins/browserstack/${each.value}"
  kms_key_id = module.jenkins_kms_secrets_manager.serviceonly_key.key_id

  tags = merge(
    local.common_tags,
    {
      project                  = "Infrastructure",
      service                  = "Secrets Manager",
      plat_env_project_service = "${local.aggregated_tag}_INFRA_SCRT"
    }
  )
}

resource "aws_secretsmanager_secret" "ui_tests_secret" {
  for_each = toset(local.ui_tests_secrets_names_list)

  name       = "${local.project_group}/jenkins/uitest/${each.value}"
  kms_key_id = module.jenkins_kms_secrets_manager.serviceonly_key.key_id

  tags = merge(
    local.common_tags,
    {
      project                  = "Infrastructure",
      service                  = "Secrets Manager",
      plat_env_project_service = "${local.aggregated_tag}_INFRA_SCRT"
    }
  )
}

resource "aws_secretsmanager_secret" "apollo_ui_tests_secret" {
  for_each = toset(local.apollo_ui_tests_secrets_names_list)

  name       = "${local.project_group}/jenkins/uitest/apollo/${each.value}"
  kms_key_id = module.jenkins_kms_secrets_manager.serviceonly_key.key_id

  tags = merge(
    local.common_tags,
    {
      project                  = "Infrastructure",
      service                  = "Secrets Manager",
      plat_env_project_service = "${local.aggregated_tag}_INFRA_SCRT"
    }
  )
}

resource "aws_secretsmanager_secret" "delphi_stage_secrets" {
  for_each = toset(local.delphi_stage_secrets)

  name       = "${local.delphi_stage_secrets_name_prefix}/${each.value}"
  kms_key_id = module.jenkins_kms_secrets_manager.serviceonly_key.key_id

  tags = merge(
    local.common_tags,
    {
      project                  = "Infrastructure",
      service                  = "Secrets Manager",
      plat_env_project_service = "${local.aggregated_tag}_SCRT"
    }
  )
}

resource "aws_secretsmanager_secret" "atlas_load_tester_secrets" {
  for_each = toset(local.atlas_load_tester_secrets)

  name       = "${local.project_group}/jenkins/load-tester/${each.value}"
  kms_key_id = module.jenkins_kms_secrets_manager.serviceonly_key.key_id

  tags = merge(
    local.common_tags,
    {
      project                  = "Infrastructure",
      service                  = "Secrets Manager",
      plat_env_project_service = "${local.aggregated_tag}_SCRT"
    }
  )
}

resource "aws_secretsmanager_secret" "common_secrets" {
  for_each = toset([
    "${local.project_group}/jenkins/octopus_api_key",
    "${local.project_group}/jenkins/common/pypi_nexus",
    "${local.project_group}/jenkins/common/maven_nexus",
    "${local.project_group}/jenkins/common/sonar_project_key",
    "${local.project_group}/jenkins/common/sonar_login_token",
  ])

  name       = each.value
  kms_key_id = module.jenkins_kms_secrets_manager.serviceonly_key.key_id

  tags = merge(
    local.common_tags,
    {
      project                  = "Infrastructure",
      service                  = "Secrets Manager",
      plat_env_project_service = "${local.aggregated_tag}_SCRT"
    }
  )
}

resource "aws_secretsmanager_secret" "delphi_artists_onboarding_secrets" {
  for_each = toset(local.delphi_artists_onboarding_secrets)

  name       = each.value
  kms_key_id = module.jenkins_kms_secrets_manager.serviceonly_key.key_id

  tags = merge(
    local.common_tags,
    {
      project                  = "Infrastructure",
      service                  = "Secrets Manager",
      plat_env_project_service = "${local.aggregated_tag}_SCRT"
    }
  )
}
