terraform {
  backend "s3" {
    bucket                  = "gdb-core-dev-tfstate"
    key                     = "Core/Common/main.tfstate"
    region                  = "us-east-1"
    shared_credentials_file = "~/.aws/credentials"
    profile                 = "gdb-core-dev"
    dynamodb_table          = "terraform-state-lock-dynamodb"
  }
}

# Get current account ID and global accounts list
data "aws_caller_identity" "current" {}

module "aws_accounts_list" {
  source = "../../modules/iam/aws_accounts_list"
}

locals {
  # define AZ in region id
  availability_zones  = formatlist("%v%v", var.aws_region_id, ["a", "b", "c"])
  name_prefix         = lower("${var.platform["prefix"]}-${var.platform["name"]}")
  env_prefix          = lower(var.platform["prefix"])
  account_id          = data.aws_caller_identity.current.account_id
  platform            = lower(var.platform["name"])
  aggregated_tag      = "${var.platform.short_platform_name}_${var.platform.prefix}"
  secrets_name_prefix = "${local.platform}/dev"
  policy_base_arn     = "arn:aws:iam::${local.account_id}:policy/dev-${local.platform}"

  rw_accounts = [module.aws_accounts_list.accounts["gdb-delphi-dev"]]
  ro_accounts = [module.aws_accounts_list.accounts["gdb-core-prod"]]

  common_tags = {
    platform          = var.platform["name"]
    environment       = var.platform["environment"]
    platform_with_env = "${var.platform["name"]} ${var.platform["environment"]}"
    managed_by        = "Terraform"
  }

  images_api_tags = merge(
    local.common_tags,
    {
      project                  = "IMAGES",
      service                  = "ECR",
      plat_env_project_service = upper("${local.aggregated_tag}_IMG_ECR")
    }
  )

  atlas_um_tags = merge(
    local.common_tags,
    {
      project                  = "User management",
      service                  = "ECR",
      plat_env_project_service = upper("${local.aggregated_tag}_UM_ECR")
    }
  )
}

module "images_api" {
  source = "../../modules/ecr/repository_v1"

  repo_name   = "core/core-images"
  rw_accounts = local.rw_accounts
  ro_accounts = local.ro_accounts
  common_tags = local.images_api_tags
}

module "reporting" {
  source = "../../modules/ecr/repository_v1"

  repo_name   = "core/reporting"
  rw_accounts = local.rw_accounts
  ro_accounts = local.ro_accounts
  common_tags = local.images_api_tags
}

module "atlas_um" {
  source = "../../modules/ecr/repository_v1"

  repo_name   = "core/atlas-um"
  rw_accounts = local.rw_accounts
  ro_accounts = local.ro_accounts
  common_tags = local.atlas_um_tags
}

module "notifications" {
  source = "../../modules/ecr/repository_v1"

  repo_name   = "core/notifications"
  rw_accounts = local.rw_accounts
  ro_accounts = local.ro_accounts
  common_tags = local.atlas_um_tags
}

module "notifications_sqitch" {
  source = "../../modules/ecr/repository_v1"

  repo_name   = "core/notifications-sqitch"
  rw_accounts = local.rw_accounts
  ro_accounts = local.ro_accounts
  common_tags = local.atlas_um_tags
}

module "atlas_um_sqitch" {
  source = "../../modules/ecr/repository_v1"

  repo_name   = "core/atlas-um-sqitch"
  rw_accounts = local.rw_accounts
  ro_accounts = local.ro_accounts
  common_tags = local.atlas_um_tags
}

module "core_1000_playlists" {
  source = "../../modules/ecr/repository_v1"

  repo_name   = "core/1000-playlists"
  rw_accounts = local.rw_accounts
  ro_accounts = local.ro_accounts
  common_tags = local.atlas_um_tags
}

module "atlas_um_integration_example" {
  source = "../../modules/ecr/repository_v1"

  repo_name   = "core/atlas-um-integration-example"
  rw_accounts = local.rw_accounts
  ro_accounts = concat(local.ro_accounts, [
    module.aws_accounts_list.accounts["gdb-apollo-dev"],
    module.aws_accounts_list.accounts["gdb-artistapp-dev"],
    module.aws_accounts_list.accounts["gdb-whitelist-dev"],
  ])
  common_tags = local.atlas_um_tags
}

module "atlas_auth_proxy" {
  source = "../../modules/ecr/repository_v1"

  repo_name   = "core/auth-proxy"
  rw_accounts = local.rw_accounts
  ro_accounts = concat(local.ro_accounts, [
    module.aws_accounts_list.accounts["gdb-apollo-dev"],
    module.aws_accounts_list.accounts["gdb-apollo-prod"],
    module.aws_accounts_list.accounts["gdb-artistapp-dev"],
    module.aws_accounts_list.accounts["gdb-artistapp-prod"],
    module.aws_accounts_list.accounts["gdb-whitelist-dev"],
    module.aws_accounts_list.accounts["gdb-whitelist-prod"],
  ])
  common_tags = local.atlas_um_tags
}

data "aws_kms_key" "secrets_general_key" {
  key_id = "alias/dev/${local.platform}/secrets_general"
}
