data "aws_vpc" "this" {
  id = var.vpc_id
}


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

# Route table for the VPC attachment
resource "aws_ec2_transit_gateway_route_table" "vpc_route_table" {
  transit_gateway_id = data.aws_ec2_transit_gateway_vpc_attachment.this.transit_gateway_id

  tags = {
    Name         = "${var.environment}-transit-gateway-route-table-${data.aws_vpc.this.tags["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  = data.aws_ec2_transit_gateway_vpc_attachment.this.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
}
