resource "aws_ec2_transit_gateway" "transit_gateway" {
  description                        = var.transit_gateway_description
  amazon_side_asn                    = var.transit_gateway_amazon_side_asn
  auto_accept_shared_attachments     = var.auto_accept_shared_attachments
  default_route_table_association    = var.default_route_table_association
  default_route_table_propagation    = var.default_route_table_propagation
  dns_support                        = "enable"
  vpn_ecmp_support                   = "enable"
  security_group_referencing_support = var.security_group_referencing_support
  tags = {
    Name                 = "${var.environment}-${var.transit_gateway_name_tag}"
    environment          = var.environment
    service_name         = "transit-gateway"
    transit_gateway_name = var.transit_gateway_name_tag
    terraformed          = "true"
  }
}

# In case we want blackhole routes, specify them as a list
resource "aws_ec2_transit_gateway_route" "transit_gateway_blackhole_route" {
  count                          = length(var.transit_gateway_blackhole_routes)
  blackhole                      = true
  destination_cidr_block         = element(var.transit_gateway_blackhole_routes, count.index)
  transit_gateway_route_table_id = aws_ec2_transit_gateway.transit_gateway.association_default_route_table_id
}

# Share transit gateway with specified principals, to allow them to create transit gateway attachments
resource "aws_ram_resource_share" "transit_gateway_resource_share" {
  name = "${var.environment}-${var.transit_gateway_name_tag}-share"

  tags = {
    Name         = "${var.environment}-${var.transit_gateway_name_tag}-share"
    environment  = var.environment
    service_name = "transit-gateway"
    terraformed  = "true"
  }
}

resource "aws_ram_resource_association" "transit_gateway_resource_association" {
  resource_arn       = aws_ec2_transit_gateway.transit_gateway.arn
  resource_share_arn = aws_ram_resource_share.transit_gateway_resource_share.arn
}

resource "aws_ram_principal_association" "transit_gateway_principal_association" {
  for_each = toset(var.transit_gateway_share_principals)

  principal          = each.value
  resource_share_arn = aws_ram_resource_share.transit_gateway_resource_share.arn
}
