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

provider "aws" {
  profile = var.aws_profile
  region  = var.aws_region_id

}

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

  ro_accounts = [
    module.aws_accounts_list.accounts["gdb-delphi-prod"],
    module.aws_accounts_list.accounts["gdb-apollo-dev"],
    module.aws_accounts_list.accounts["gdb-apollo-prod"],
  ]

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

  portal_tags = merge(
    local.common_tags,
    {
      project                  = "Portal",
      service                  = "ECR",
      plat_env_project_service = upper("${local.aggregated_tag}_PRL_ECR")
    }
  )
  etl_tags = merge(
    local.common_tags,
    {
      project                  = "ETL",
      service                  = "ECR",
      plat_env_project_service = upper("${local.aggregated_tag}_ETL_ECR")
    }
  )
  infra_tags = merge(
    local.common_tags,
    {
      project                  = "Infrastructure",
      service                  = "ECR",
      plat_env_project_service = upper("${local.aggregated_tag}_INFRA_ECR")
    }
  )
}

module "apollo-api" {
  source      = "../../modules/ecr/repository_v1"
  repo_name   = "apollo-api"
  ro_accounts = local.ro_accounts
  common_tags = local.portal_tags
}

module "agg-report-split" {
  source      = "../../modules/ecr/repository_v1"
  repo_name   = "apollo-etl/agg-report-split"
  ro_accounts = local.ro_accounts
  common_tags = local.etl_tags
}

module "collect-applemusic-reports" {
  source      = "../../modules/ecr/repository_v1"
  repo_name   = "apollo-etl/collect-applemusic-reports"
  ro_accounts = local.ro_accounts
  common_tags = local.etl_tags
}

module "collect-spotify-analytics" {
  source      = "../../modules/ecr/repository_v1"
  repo_name   = "apollo-etl/collect-spotify-analytics"
  ro_accounts = local.ro_accounts
  common_tags = local.etl_tags
}

module "consumer-analytics" {
  source      = "../../modules/ecr/repository_v1"
  repo_name   = "apollo-etl/consumer-analytics"
  ro_accounts = local.ro_accounts
  common_tags = local.etl_tags
}

module "dbingest" {
  source      = "../../modules/ecr/repository_v1"
  repo_name   = "apollo-etl/dbingest"
  ro_accounts = local.ro_accounts
  common_tags = local.etl_tags
}

module "go-apollo" {
  source      = "../../modules/ecr/repository_v1"
  repo_name   = "apollo-etl/go-apollo"
  ro_accounts = local.ro_accounts
  rw_accounts = [module.aws_accounts_list.accounts["gdb-apollo-prod"]]
  common_tags = local.etl_tags
}

module "prepare-for-athena" {
  source      = "../../modules/ecr/repository_v1"
  repo_name   = "apollo-etl/prepare-for-athena"
  ro_accounts = local.ro_accounts
  common_tags = local.etl_tags
}

module "protobuf" {
  source      = "../../modules/ecr/repository_v1"
  repo_name   = "apollo-etl/protobuf"
  ro_accounts = local.ro_accounts
  common_tags = local.etl_tags
}

module "apolloapp" {
  source      = "../../modules/ecr/repository_v1"
  repo_name   = "apolloapp"
  ro_accounts = local.ro_accounts
  common_tags = local.portal_tags
}

module "spotifyconsumeranalytics" {
  source      = "../../modules/ecr/repository_v1"
  repo_name   = "spotifyconsumeranalytics"
  ro_accounts = local.ro_accounts
  common_tags = local.portal_tags
}

module "privateapi" {
  source      = "../../modules/ecr/repository_v1"
  repo_name   = "filtr/privateapi"
  ro_accounts = local.ro_accounts
  common_tags = local.portal_tags
}

module "sd-go" {
  source      = "../../modules/ecr/repository_v1"
  repo_name   = "sd-go"
  ro_accounts = local.ro_accounts
  common_tags = local.etl_tags
}

module "dsp-api" {
  source      = "../../modules/ecr/repository_v1"
  repo_name   = "dsp-api"
  ro_accounts = local.ro_accounts
  common_tags = local.portal_tags
}

module "dsp-smart-cache" {
  source      = "../../modules/ecr/repository_v1"
  repo_name   = "dsp-smart-cache"
  ro_accounts = local.ro_accounts
  common_tags = local.portal_tags
}

module "update_streams_cache" {
  source      = "../../modules/ecr/repository_v1"
  repo_name   = "apollo/update_streams_cache"
  ro_accounts = local.ro_accounts
  common_tags = local.portal_tags
}

module "update_track_playlist_history" {
  source      = "../../modules/ecr/repository_v1"
  repo_name   = "apollo/update_track_playlist_history"
  ro_accounts = local.ro_accounts
  common_tags = local.portal_tags
}

module "apollo_api_healthcheck_lambda" {
  source      = "../../modules/ecr/repository_v1"
  repo_name   = "apollo/lambda/apollo-api-healthcheck"
  ro_accounts = local.ro_accounts
  common_tags = local.portal_tags
}

module "apple_charts_notifications_lambda" {
  source      = "../../modules/ecr/repository_v1"
  repo_name   = "apollo/lambda/apple-charts-notifications"
  ro_accounts = local.ro_accounts
  common_tags = local.portal_tags
}

module "apple_playlists_additions_notifications_lambda" {
  source      = "../../modules/ecr/repository_v1"
  repo_name   = "apollo/lambda/apple-playlists-additions-notifications"
  ro_accounts = local.ro_accounts
  common_tags = local.portal_tags
}

module "apple_top_playlists_aggregation_lambda" {
  source      = "../../modules/ecr/repository_v1"
  repo_name   = "apollo/lambda/apple-top-playlists-aggregation"
  ro_accounts = local.ro_accounts
  common_tags = local.portal_tags
}

module "auth0_block_users_lambda" {
  source      = "../../modules/ecr/repository_v1"
  repo_name   = "apollo/lambda/auth0-block-users"
  ro_accounts = local.ro_accounts
  common_tags = local.portal_tags
}

module "backfill_missing_charts_data_lambda" {
  source      = "../../modules/ecr/repository_v1"
  repo_name   = "apollo/lambda/backfill-missing-charts-data"
  ro_accounts = local.ro_accounts
  common_tags = local.portal_tags
}

module "copy_auth0_logs_to_cloudwatch_lambda" {
  source      = "../../modules/ecr/repository_v1"
  repo_name   = "apollo/lambda/copy-auth0-logs-to-cloudwatch"
  ro_accounts = local.ro_accounts
  common_tags = local.portal_tags
}

module "handle_user_changes_lambda" {
  source      = "../../modules/ecr/repository_v1"
  repo_name   = "apollo/lambda/handle-user-changes"
  ro_accounts = local.ro_accounts
  common_tags = local.portal_tags
}

module "retrieve_and_save_mobile_versions_lambda" {
  source      = "../../modules/ecr/repository_v1"
  repo_name   = "apollo/lambda/retrieve-and-save-mobile-versions"
  ro_accounts = local.ro_accounts
  common_tags = local.portal_tags
}

module "send_push_notifications_lambda" {
  source      = "../../modules/ecr/repository_v1"
  repo_name   = "apollo/lambda/send-push-notifications"
  ro_accounts = local.ro_accounts
  common_tags = local.portal_tags
}

module "spotify_charts_notifications_lambda" {
  source      = "../../modules/ecr/repository_v1"
  repo_name   = "apollo/lambda/spotify-charts-notifications"
  ro_accounts = local.ro_accounts
  common_tags = local.portal_tags
}

module "spotify_playlists_additions_notifications_lambda" {
  source      = "../../modules/ecr/repository_v1"
  repo_name   = "apollo/lambda/spotify-playlists-additions-notifications"
  ro_accounts = local.ro_accounts
  common_tags = local.portal_tags
}

module "track_visit_events_handling_lambda" {
  source      = "../../modules/ecr/repository_v1"
  repo_name   = "apollo/lambda/track-visit-events-handling"
  ro_accounts = local.ro_accounts
  common_tags = local.portal_tags
}

module "apollo_clear_notifications_lambda" {
  source      = "../../modules/ecr/repository_v1"
  repo_name   = "apollo/lambda/apollo-clear-notifications"
  ro_accounts = local.ro_accounts
  common_tags = local.portal_tags
}

module "update_market_vendors_lambda" {
  source      = "../../modules/ecr/repository_v1"
  repo_name   = "apollo/lambda/update-market-vendors"
  ro_accounts = local.ro_accounts
  common_tags = local.portal_tags
}

module "copy_track_playlist_history_last_week" {
  source      = "../../modules/ecr/repository_v1"
  repo_name   = "apollo/copy-track-playlist-history-last-week"
  ro_accounts = local.ro_accounts
  common_tags = local.portal_tags
}

module "selinoid_runner" {
  source      = "../../modules/ecr/repository_v1"
  repo_name   = "apollo/ui-test-selinoid-runner"
  common_tags = local.portal_tags
}

module "personalized_playlists_update_job" {
  source      = "../../modules/ecr/repository_v1"
  repo_name   = "apollo/personalized-playlists-update-job"
  ro_accounts = local.ro_accounts
  common_tags = local.portal_tags
}

module "vendor_api" {
  source      = "../../modules/ecr/repository_v1"
  repo_name   = "vendor-api"
  ro_accounts = local.ro_accounts
  common_tags = local.portal_tags
}

module "apple_charts_exits_notifications_job" {
  source    = "../../modules/ecr/repository_v1"
  repo_name = "apollo/apple-charts-exits-notifications-job"

  ro_accounts = local.ro_accounts
  common_tags = local.portal_tags
}

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

  repo_name   = "apollo/apple-charts-moves-notifications-job"
  ro_accounts = local.ro_accounts
  common_tags = local.portal_tags
}

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

  repo_name   = "apollo/spotify-charts-entries-notifications-job"
  ro_accounts = local.ro_accounts
  common_tags = local.portal_tags
}

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

  repo_name   = "apollo/spotify-charts-exits-notifications-job"
  ro_accounts = local.ro_accounts
  common_tags = local.portal_tags
}

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

  repo_name   = "apollo/spotify-charts-moves-notifications-job"
  ro_accounts = local.ro_accounts
  common_tags = local.portal_tags
}
