terraform {
  backend "s3" {
    bucket                  = "prod-dna-tfstate"
    key                     = "Delphi/Production/deploy.tfstate"
    region                  = "us-east-1"
    shared_credentials_file = "~/.aws/credentials"
    profile                 = "gdb-delphi-prod"
    dynamodb_table          = "terraform-state-lock-dynamodb"
  }
}

locals {
  env_prefix          = lower(var.platform.prefix)
  project_group       = lower(var.platform.name)
  name_prefix         = "${local.env_prefix}-${local.project_group}"
  account_id          = data.aws_caller_identity.current.account_id
  secrets_name_prefix = "${local.project_group}/${local.env_prefix}"
  aggregated_tag      = "${var.platform.short_platform_name}_${upper(var.platform.prefix)}"
  policy_base_arn     = "arn:aws:iam::${local.account_id}:policy/${local.name_prefix}"
  ses_receiver_email  = "delphi.incoming@mail.delphiplatform.io"
  ses_senders = [
    "delphi.incoming@mail.delphiplatform.io",
    "delphi.outgoing@mail.delphiplatform.io",
    "no-reply@mail.delphiplatform.io",
  ]
  ses_no_reply_email = "no-reply@mail.delphiplatform.io"
  ses_testing_email  = "testing@mail.delphiplatform.io"

  common_tags = {}

  docker_image_env_tag = {
    dev   = "develop",
    qa    = "qa",
    stage = "release",
    uat   = "uat",
    prod  = "master",
  }

  log_retention = {
    dev   = 30,
    qa    = 90,
    stage = 180,
    prod  = 365,
  }
}

data "aws_caller_identity" "current" {}

data "aws_vpc" "main" {
  tags = {
    Name = "${local.env_prefix}-${local.project_group}-vpc"
  }
}

data "aws_subnets" "public_subnets" {
  filter {
    name   = "vpc-id"
    values = [data.aws_vpc.main.id]
  }

  tags = {
    Name = "${local.name_prefix}-subnet-public-0*"
  }
}

data "aws_subnets" "private_subnets" {
  filter {
    name   = "vpc-id"
    values = [data.aws_vpc.main.id]
  }

  tags = {
    Name = "${local.name_prefix}-subnet-private-0*"
  }
}

data "aws_security_group" "main" {
  tags = {
    Name = "${local.env_prefix}-${local.project_group}-sg-ecs"
  }
}

data "aws_security_group" "lambda" {
  tags = {
    Name = "${local.env_prefix}-${local.project_group}-sg-lambda"
  }
}

data "aws_security_group" "db" {
  tags = {
    Name = "${local.env_prefix}-${local.project_group}-sg-aurora"
  }
}

data "aws_iam_role" "standard_exec" {
  name = "${local.env_prefix}-${local.project_group}-ecs_task_execution_role"
}

data "aws_ecs_cluster" "main" {
  cluster_name = "${local.env_prefix}-${local.project_group}-clu"
}

data "aws_iam_policy" "secrets-services-ro" {
  arn = "${local.policy_base_arn}-secrets-services-ro"
}

data "aws_iam_policy" "secrets-services-rw" {
  arn = "${local.policy_base_arn}-secrets-services-rw"
}

data "aws_iam_policy" "logging" {
  arn = "${local.policy_base_arn}-logging"
}


data "aws_lb" "external_alb" {
  name = "${local.env_prefix}-${local.project_group}-alb-external"
}

data "aws_lb" "nlb" {
  name = "${local.env_prefix}-${local.project_group}-nlb"
}

data "aws_lb_listener" "external_https_listener" {
  load_balancer_arn = data.aws_lb.external_alb.arn
  port              = 443
}

data "aws_lb_listener" "external_http_listener" {
  load_balancer_arn = data.aws_lb.external_alb.arn
  port              = 80
}

# private external alb
data "aws_lb" "private_external_alb" {
  name = "${local.env_prefix}-${local.project_group}-alb-external-private"
}


data "aws_lb_listener" "private_external_https_listener" {
  load_balancer_arn = data.aws_lb.private_external_alb.arn
  port              = 443
}

data "aws_lb_listener" "private_external_http_listener" {
  load_balancer_arn = data.aws_lb.private_external_alb.arn
  port              = 80
}

data "aws_lb" "internal_alb" {
  name = "${local.env_prefix}-${local.project_group}-alb-internal"
}


data "aws_lb_listener" "internal_https_listener" {
  load_balancer_arn = data.aws_lb.internal_alb.arn
  port              = 443
}

data "aws_lb_listener" "internal_http_listener" {
  load_balancer_arn = data.aws_lb.internal_alb.arn
  port              = 80
}

data "aws_route53_zone" "default" {
  name         = "delphiplatform.io."
  private_zone = false
  provider     = aws.gdb-delphi-dev
}

data "aws_kms_key" "default_sns_key" {
  key_id = "arn:aws:kms:us-east-1:${local.account_id}:alias/aws/sns"
}

data "aws_kms_key" "default_sqs_key" {
  key_id = "arn:aws:kms:us-east-1:${local.account_id}:alias/aws/sqs"
}

data "aws_kms_key" "custom_default_sns_key" {
  key_id = "arn:aws:kms:us-east-1:${local.account_id}:alias/default_sns"
}

data "aws_kms_key" "custom_default_sqs_key" {
  key_id = "arn:aws:kms:us-east-1:${local.account_id}:alias/default_sqs"
}

module "iam_map" {
  source        = "../../modules/iam_policies"
  env_prefix    = lower(var.platform["prefix"])
  project_group = lower(var.platform["name"])
  ses_senders   = local.ses_senders
  assumable_roles = [
    "arn:aws:iam::${local.account_id}:role/prod-delphi-isnt_access_role"
  ]
  notification_lambda_envs = [
    {
      env_prefix : "${local.env_prefix}-apollo",
      aws_account_alias : "gdb-apollo-prod"
    },
    {
      env_prefix : "${local.env_prefix}-artistapp",
      aws_account_alias : "gdb-artistapp-prod"
    },
  ]
  additional_s3_buckets_rw = ["sme-spotify-top-reports"]
  common_tags = merge(
    local.common_tags,
    {
      service                  = "IAM",
      plat_env_project_service = "${local.aggregated_tag}_IAM"
    }
  )
}

data "aws_s3_bucket" "delphi-configs" {
  bucket = "${local.name_prefix}-configs"
}

data "aws_s3_bucket" "sme-data-archive" {
  bucket = "sme-data-archive"
}

data "aws_s3_bucket" "sme-data-decompressed" {
  bucket = "sme-data-decompressed"
}

data "aws_s3_bucket" "sme-data-corrupted" {
  bucket = "${local.name_prefix}-sme-data-corrupted"
}

data "aws_s3_bucket" "delphi-quarantine-sme-data-archive" {
  bucket = "${local.env_prefix}-delphi-quarantine-sme-data-archive"
}

data "aws_s3_bucket" "delphi-quarantine-sme-data-decompressed" {
  bucket = "${local.env_prefix}-delphi-quarantine-sme-data-decompressed"
}
resource "aws_cloudwatch_log_group" "datadog-agent" {
  name = "/ecs/${local.name_prefix}-datadog-agent"
  tags = merge(
    local.common_tags,
    {
      project                  = "Infrastructure",
      service                  = "ECS",
      plat_env_project_service = "${local.aggregated_tag}_INFRA_ECS"
    }
  )
}

data "aws_batch_job_queue" "slz_downloader_main" {
  name = "${local.name_prefix}-main"
}

data "aws_batch_job_queue" "slz_downloader_main_m5xlarge" {
  name = "${local.name_prefix}-main_m5xlarge"
}

data "aws_batch_job_queue" "enhanced_storage" {
  name = "${local.name_prefix}-enhanced-storage"
}

data "aws_batch_job_queue" "slz_downloader_spotqueue" {
  name = "${local.name_prefix}-spotqueue"
}

data "aws_batch_job_queue" "slz_downloader_hasher" {
  name = "${local.name_prefix}-hasher"
}

data "aws_batch_job_queue" "slz_downloader_hasher_long" {
  name = "${local.name_prefix}-hasher-long"
}

data "aws_batch_job_queue" "slz_downloader_utility" {
  name = "${local.name_prefix}-utility"
}

data "aws_batch_job_queue" "slz_downloader_utility_long" {
  name = "${local.name_prefix}-utility-long"
}

data "aws_batch_job_queue" "dapd" {
  name = "${local.name_prefix}-dapd"
}

# Account main log bucket
data "aws_s3_bucket" "logs" {
  bucket = "security-${data.aws_caller_identity.current.account_id}-logs"
}

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

data "aws_kms_key" "secrets_general_key" {
  key_id = "alias/${local.env_prefix}/${local.project_group}/secrets_general"
}

data "aws_elasticsearch_domain" "search" {
  domain_name = "${local.name_prefix}-search"
}

data "aws_iam_policy" "ddex_feed_ro_policy" {
  arn = "arn:aws:iam::${local.account_id}:policy/${local.env_prefix == "prod" ? "prod" : "dev"}-ddex-feed-s3-ro"
}

data "aws_iam_policy" "ddex_feed_rw_policy" {
  arn = "arn:aws:iam::${local.account_id}:policy/${local.env_prefix == "prod" ? "prod" : "dev"}-ddex-feed-s3-rw"
}
