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
  service_name       = var.service_name
}

provider "aws" {
  region = "us-east-1"
  alias  = "us_east_1"

  default_tags {
    tags = module.default_tags.tags
  }
}

provider "aws" {
  region = "us-west-2"
  alias  = "us_west_2"

  default_tags {
    tags = module.default_tags.tags
  }
}

provider "aws" {
  region = "eu-central-1"
  alias  = "eu_central_1"

  default_tags {
    tags = module.default_tags.tags
  }
}

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

resource "aws_networkmanager_global_network" "global_network" {
  description = "Orchard Global Network"
  tags = {
    Name         = "${var.environment}-global-network"
    environment  = var.environment
    service_name = var.service_name
    terraformed  = "true"
  }
}

module "transit_gateway_us_east_1" {
  source = "git@github.com:theorchard/terraform-transit-gateway.git//modules/transit-gateway?ref=1.3.1"
  providers = {
    aws = aws.us_east_1
  }

  environment                        = var.environment
  transit_gateway_share_principals   = var.transit_gateway_share_principals
  default_route_table_association    = "disable"
  transit_gateway_name_tag           = "transit-gateway-us-east-1"
  transit_gateway_amazon_side_asn    = 64513
  security_group_referencing_support = "enable"
}

resource "aws_networkmanager_transit_gateway_registration" "transit_gateway_registration_us_east_1" {
  global_network_id   = aws_networkmanager_global_network.global_network.id
  transit_gateway_arn = module.transit_gateway_us_east_1.transit_gateway_arn_output
}

module "transit_gateway_us_west_2" {
  source = "git@github.com:theorchard/terraform-transit-gateway.git//modules/transit-gateway?ref=1.3.1"
  providers = {
    aws = aws.us_west_2
  }

  environment                      = var.environment
  transit_gateway_share_principals = var.transit_gateway_share_principals
  default_route_table_association  = "disable"
  transit_gateway_name_tag         = "transit-gateway-us-west-2"
  transit_gateway_amazon_side_asn  = 64514
}

resource "aws_networkmanager_transit_gateway_registration" "transit_gateway_registration_us_west_2" {
  global_network_id   = aws_networkmanager_global_network.global_network.id
  transit_gateway_arn = module.transit_gateway_us_west_2.transit_gateway_arn_output
}

module "transit_gateway_eu_central_1" {
  source = "git@github.com:theorchard/terraform-transit-gateway.git//modules/transit-gateway?ref=1.3.1"
  providers = {
    aws = aws.eu_central_1
  }

  environment                      = var.environment
  transit_gateway_share_principals = var.transit_gateway_share_principals
  default_route_table_association  = "disable"
  transit_gateway_name_tag         = "transit-gateway-eu-central-1"
  transit_gateway_amazon_side_asn  = 64515
}

resource "aws_networkmanager_transit_gateway_registration" "transit_gateway_registration_eu_central_1" {
  global_network_id   = aws_networkmanager_global_network.global_network.id
  transit_gateway_arn = module.transit_gateway_eu_central_1.transit_gateway_arn_output
}
