# Manage the accepter side of the VPC attachment
resource "aws_ec2_transit_gateway_vpc_attachment_accepter" "vpc_attachment_accepter" {
  transit_gateway_attachment_id                   = var.transit_gateway_attachment_id
  transit_gateway_default_route_table_association = false

  tags = {
    Name         = "${var.environment}-transit-gateway-vpc-attachment-${var.vpc_name}"
    environment  = var.environment
    service_name = "transit-gateway"
    vpc_name     = var.vpc_name
    terraformed  = "true"
  }
}

# Route table for the VPC attachment
resource "aws_ec2_transit_gateway_route_table" "vpc_route_table" {
  transit_gateway_id = aws_ec2_transit_gateway_vpc_attachment_accepter.vpc_attachment_accepter.transit_gateway_id

  tags = {
    Name         = "${var.environment}-transit-gateway-route-table-${var.vpc_name}"
    environment  = var.environment
    service_name = "transit-gateway"
    terraformed  = "true"
  }
}

# Association between the VPC attachment and the route table
resource "aws_ec2_transit_gateway_route_table_association" "vpc_route_table_assocation" {
  transit_gateway_attachment_id  = aws_ec2_transit_gateway_vpc_attachment_accepter.vpc_attachment_accepter.id
  transit_gateway_route_table_id = aws_ec2_transit_gateway_route_table.vpc_route_table.id
}

resource "aws_ec2_transit_gateway_route" "route" {
  for_each = var.routes

  destination_cidr_block         = each.key
  transit_gateway_route_table_id = aws_ec2_transit_gateway_route_table.vpc_route_table.id
  transit_gateway_attachment_id  = each.value
}

resource "aws_ec2_transit_gateway_prefix_list_reference" "prefix_list_reference" {
  for_each = var.managed_prefix_list_references

  prefix_list_id                 = each.key
  transit_gateway_route_table_id = aws_ec2_transit_gateway_route_table.vpc_route_table.id
  transit_gateway_attachment_id  = each.value
}
