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}"

  ro_accounts = [
    module.aws_accounts_list.accounts["gdb-artistapp-prod"]
  ]

  rw_accounts = [
    module.aws_accounts_list.accounts["gdb-delphi-dev"],
    module.aws_accounts_list.accounts["gdb-infra-dev"]
  ]

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

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

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

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

  repo_name   = "artistapp/api"
  rw_accounts = local.rw_accounts
  ro_accounts = local.ro_accounts

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Infrastructure",
      service                  = "ECR",
      plat_env_project_service = "${local.aggregated_tag}_INFRA_ECR"
    }
  )
}

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

  repo_name   = "rti/user-preferences-service"
  rw_accounts = local.rw_accounts
  ro_accounts = local.ro_accounts

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Infrastructure",
      service                  = "ECR",
      plat_env_project_service = "${local.aggregated_tag}_INFRA_ECR"
    }
  )
}

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

  repo_name   = "rti/amadeus"
  rw_accounts = local.rw_accounts
  ro_accounts = local.ro_accounts

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Infrastructure",
      service                  = "ECR",
      plat_env_project_service = "${local.aggregated_tag}_INFRA_ECR"
    }
  )
}

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

  repo_name   = "rti/pytest"
  rw_accounts = local.rw_accounts
  ro_accounts = local.ro_accounts

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Infrastructure",
      service                  = "ECR",
      plat_env_project_service = "${local.aggregated_tag}_INFRA_ECR"
    }
  )
}

module "rti_notifications_worker_ecr" {
  source = "../../modules/ecr/repository_v2"

  lambda      = true
  repo_name   = "rti/lambda/notifications-worker"
  rw_accounts = local.rw_accounts
  ro_accounts = local.ro_accounts

  replication_destination = {
    gdb-artistapp-prod = {
      region                 = "us-east-1"
      destination_account_id = module.aws_accounts_list.accounts["gdb-artistapp-prod"]
    }
  }

  common_tags = merge(
    local.common_tags,
    {
      project                  = "Infrastructure",
      service                  = "ECR",
      plat_env_project_service = "${local.aggregated_tag}_INFRA_ECR"
    }
  )

  providers = {
    aws        = aws
    aws.target = aws.gdb-artistapp-prod
  }
}

module "registry_replication_policy" {
  source = "../../modules/ecr/registry_policy"

  source_account_id = local.account_id
  target_account_id = module.aws_accounts_list.accounts["gdb-artistapp-prod"]

  providers = {
    aws = aws.gdb-artistapp-prod
  }
}
