module "default_tags" {
  source             = "git@github.com:theorchard/terraform-default-tags.git//?ref=2.0.0"
  environment        = var.environment
  application_family = var.application_family
  team_name          = var.team_name
}

provider "aws" {
  region = "us-east-1"
  default_tags {
    tags = {
      environment = var.environment
      vpc_name    = var.vpc_name
      terraformed = true
    }
  }
}

provider "aws" {
  region = "eu-central-1"
  alias  = "eu-central-1"
  default_tags {
    tags = {
      environment = var.environment
      vpc_name    = var.vpc_name
      terraformed = true
    }
  }
}

# Terraform backends cannot contain interpolations
terraform {
  backend "s3" {
    bucket  = "networking-orcd-terraform-state"
    key     = "networking/transit-gateway-vpc-attachments/us-east-1/shared/terraform.tfstate"
    region  = "us-east-1"
    encrypt = "true"
  }
}

data "aws_ec2_transit_gateway_vpc_attachment" "attachment_request" {
  filter {
    name   = "vpc-id"
    values = [var.vpc_id]
  }
}

data "aws_ec2_managed_prefix_list" "vpn_ny" {
  filter {
    name   = "prefix-list-name"
    values = ["vpn-ny"]
  }
}

data "aws_ec2_transit_gateway_vpc_attachment" "dev" {

  filter {
    name   = "vpc-id"
    values = [var.orcd_dev_vpc_id]
  }
}

data "aws_ec2_transit_gateway_vpc_attachment" "prod" {

  filter {
    name   = "vpc-id"
    values = [var.orcd_prod_vpc_id]
  }
}

data "aws_ec2_transit_gateway_vpc_attachment" "permissions_platform_qa" {

  filter {
    name   = "vpc-id"
    values = [var.permissions_platform_qa_vpc_id]
  }
}

data "aws_ec2_transit_gateway_vpc_attachment" "permissions_platform_prod" {

  filter {
    name   = "vpc-id"
    values = [var.permissions_platform_prod_vpc_id]
  }
}

data "aws_ec2_transit_gateway_vpc_attachment" "switchboard_qa_kafka" {
  filter {
    name   = "tag:vpc_name"
    values = ["switchboard-qa"]
  }
}

data "aws_ec2_managed_prefix_list" "orchard_dev_private" {
  name = "dev-orcd-private-subnet-prefix-list"
}

data "aws_ec2_managed_prefix_list" "orchard_prod_private" {
  name = "prod-orcd-private-subnet-prefix-list"
}

data "aws_ec2_managed_prefix_list" "orchard_uat_private" {
  name = "uat-orcd-private-subnet-prefix-list"
}

data "aws_ec2_managed_prefix_list" "permissions_platform_qa_private" {
  name = "qa-permissions-platform-private-subnet-prefix-list"
}

data "aws_ec2_managed_prefix_list" "permissions_platform_prod_private" {
  name = "prod-permissions-platform-private-subnet-prefix-list"
}

data "aws_ec2_managed_prefix_list" "accounting_qa_private" {
  name = "qa-accounting-private-subnet-prefix-list"
}

data "aws_ec2_managed_prefix_list" "accounting_uat_private" {
  name = "uat-accounting-private-subnet-prefix-list"
}

data "aws_ec2_managed_prefix_list" "accounting_prod_private" {
  name = "prod-accounting-private-subnet-prefix-list"
}

data "aws_ec2_managed_prefix_list" "supply_chain_qa_private" {
  name = "qa-supply-chain-private-subnet-prefix-list"
}

data "aws_ec2_managed_prefix_list" "supply_chain_prod_private" {
  name = "prod-supply-chain-private-subnet-prefix-list"
}

data "aws_ec2_managed_prefix_list" "mobile_code_push_qa_private" {
  name = "qa-mobile-code-push-private-subnet-prefix-list"
}

data "aws_ec2_managed_prefix_list" "mobile_code_push_prod_private" {
  name = "prod-mobile-code-push-private-subnet-prefix-list"
}

data "aws_ec2_managed_prefix_list" "eom_dev_digsys_d3_private" {
  name = "dev-eom-digsys-d3-private-subnet-prefix-list"
}

data "aws_ec2_managed_prefix_list" "eom_prod_digsys_p3_private" {
  name = "prod-eom-digsys-p3-private-subnet-prefix-list"
}

data "aws_ec2_managed_prefix_list" "amp_prod_private" {
  name = "prod-amp-amp-aas-p2-private-subnet-prefix-list"
}

data "aws_ec2_managed_prefix_list" "fansifter_qa_private" {
  filter {
    name   = "prefix-list-name"
    values = ["qa-fansifter-private-subnet-prefix-list"]
  }
}

data "aws_ec2_managed_prefix_list" "fansifter_prod_private" {
  filter {
    name   = "prefix-list-name"
    values = ["prod-fansifter-private-subnet-prefix-list"]
  }
}

data "aws_ec2_managed_prefix_list" "switchboard_qa_private" {
  name = "qa-switchboard-private-subnet-prefix-list"
}

data "aws_ec2_transit_gateway_vpc_attachment" "fansifter_qa" {
  filter {
    name   = "tag:vpc_name"
    values = ["fansifter-qa"]
  }
}

data "aws_ec2_transit_gateway_vpc_attachment" "fansifter_prod" {
  filter {
    name   = "tag:vpc_name"
    values = ["fansifter-prod"]
  }
}

data "aws_ec2_transit_gateway_vpc_attachment" "accounting_qa" {
  filter {
    name   = "tag:vpc_name"
    values = ["accounting-qa"]
  }
}

data "aws_ec2_transit_gateway_vpc_attachment" "accounting_uat" {
  filter {
    name   = "tag:vpc_name"
    values = ["accounting-qa"]
  }
}

data "aws_ec2_transit_gateway_vpc_attachment" "accounting_prod" {
  filter {
    name   = "tag:vpc_name"
    values = ["accounting-prod"]
  }
}

data "aws_ec2_transit_gateway_vpc_attachment" "supply_chain_qa" {
  filter {
    name   = "tag:vpc_name"
    values = ["supply-chain-qa"]
  }
}

data "aws_ec2_transit_gateway_vpc_attachment" "supply_chain_prod" {
  filter {
    name   = "tag:vpc_name"
    values = ["supply-chain-prod"]
  }
}

data "aws_ec2_transit_gateway_vpc_attachment" "mobile_code_push_qa" {
  filter {
    name   = "tag:vpc_name"
    values = ["mobile-code-push-qa"]
  }
}

data "aws_ec2_transit_gateway_vpc_attachment" "mobile_code_push_prod" {
  filter {
    name   = "tag:vpc_name"
    values = ["mobile-code-push-prod"]
  }
}

data "aws_ec2_transit_gateway_vpc_attachment" "eom_dev_digsys_d3" {
  provider = aws.eu-central-1
  filter {
    name   = "tag:vpc_name"
    values = ["eom-dev-digsys-d3"]
  }
}

data "aws_ec2_transit_gateway_vpn_attachment" "vpn_ny" {
  tags = {
    vpn_name = "ny"
  }
}

data "aws_ec2_managed_prefix_list" "vpn_sme_internal_primary" {
  filter {
    name   = "prefix-list-name"
    values = ["vpn-sme-internal-primary"]
  }
}

data "aws_ec2_transit_gateway_vpn_attachment" "vpn_sme_internal_primary" {
  tags = {
    vpn_name = "vpn-sme-internal-primary"
  }
}

data "aws_ec2_transit_gateway_peering_attachment" "eu_central_1" {
  filter {
    name   = "tag:peer_region"
    values = ["eu-central-1"]
  }
}

module "transit_gateway_attachment" {
  source = "git@github.com:theorchard/terraform-transit-gateway.git//modules/transit-gateway-vpc-attachment?ref=1.3.1"

  transit_gateway_attachment_id = data.aws_ec2_transit_gateway_vpc_attachment.attachment_request.id
  environment                   = var.environment
  vpc_name                      = var.vpc_name

  managed_prefix_list_references = {
    (data.aws_ec2_managed_prefix_list.vpn_ny.id)                            = data.aws_ec2_transit_gateway_vpn_attachment.vpn_ny.id
    (data.aws_ec2_managed_prefix_list.orchard_dev_private.id)               = data.aws_ec2_transit_gateway_vpc_attachment.dev.id
    (data.aws_ec2_managed_prefix_list.orchard_prod_private.id)              = data.aws_ec2_transit_gateway_vpc_attachment.prod.id
    (data.aws_ec2_managed_prefix_list.orchard_uat_private.id)               = data.aws_ec2_transit_gateway_vpc_attachment.prod.id
    (data.aws_ec2_managed_prefix_list.permissions_platform_qa_private.id)   = data.aws_ec2_transit_gateway_vpc_attachment.permissions_platform_qa.id
    (data.aws_ec2_managed_prefix_list.permissions_platform_prod_private.id) = data.aws_ec2_transit_gateway_vpc_attachment.permissions_platform_prod.id
    (data.aws_ec2_managed_prefix_list.switchboard_qa_private.id)            = data.aws_ec2_transit_gateway_vpc_attachment.switchboard_qa_kafka.id
    (data.aws_ec2_managed_prefix_list.fansifter_qa_private.id)              = data.aws_ec2_transit_gateway_vpc_attachment.fansifter_qa.id
    (data.aws_ec2_managed_prefix_list.fansifter_prod_private.id)            = data.aws_ec2_transit_gateway_vpc_attachment.fansifter_prod.id
    (data.aws_ec2_managed_prefix_list.vpn_sme_internal_primary.id)          = data.aws_ec2_transit_gateway_vpn_attachment.vpn_sme_internal_primary.id
    (data.aws_ec2_managed_prefix_list.accounting_qa_private.id)             = data.aws_ec2_transit_gateway_vpc_attachment.accounting_qa.id
    (data.aws_ec2_managed_prefix_list.accounting_prod_private.id)           = data.aws_ec2_transit_gateway_vpc_attachment.accounting_prod.id
    (data.aws_ec2_managed_prefix_list.supply_chain_qa_private.id)           = data.aws_ec2_transit_gateway_vpc_attachment.supply_chain_qa.id
    (data.aws_ec2_managed_prefix_list.supply_chain_prod_private.id)         = data.aws_ec2_transit_gateway_vpc_attachment.supply_chain_prod.id
    (data.aws_ec2_managed_prefix_list.accounting_uat_private.id)            = data.aws_ec2_transit_gateway_vpc_attachment.accounting_uat.id
    (data.aws_ec2_managed_prefix_list.mobile_code_push_qa_private.id)       = data.aws_ec2_transit_gateway_vpc_attachment.mobile_code_push_qa.id
    (data.aws_ec2_managed_prefix_list.mobile_code_push_prod_private.id)     = data.aws_ec2_transit_gateway_vpc_attachment.mobile_code_push_prod.id
    (data.aws_ec2_managed_prefix_list.eom_dev_digsys_d3_private.id)         = data.aws_ec2_transit_gateway_peering_attachment.eu_central_1.id
    (data.aws_ec2_managed_prefix_list.eom_prod_digsys_p3_private.id)        = data.aws_ec2_transit_gateway_peering_attachment.eu_central_1.id
    (data.aws_ec2_managed_prefix_list.amp_prod_private.id)                  = data.aws_ec2_transit_gateway_peering_attachment.eu_central_1.id
  }
}
