/*
 * Terraform networking resources for AWS.
 */

data "aws_vpc" "main" {
  id = var.aws_vpc_id
}

locals {
  aws_vpc_name = data.aws_vpc.main.tags["Name"]
}

/*
 * ----------VPN Connection----------
 */

resource "aws_vpn_gateway" "gcp_vpn_gw" {
  vpc_id = data.aws_vpc.main.id
  tags = merge(
    var.common_tags,
    { Name = "gcp_network_${data.google_compute_network.main.name}" },
  )
  amazon_side_asn = var.AWS_TUN_VPN_GW_ASN
}

data "aws_route_tables" "rts" {
  vpc_id = var.aws_vpc_id
}

resource "aws_vpn_gateway_route_propagation" "gcp_vpn" {
  count          = length(data.aws_route_tables.rts.ids)
  route_table_id = tolist(data.aws_route_tables.rts.ids)[count.index]
  vpn_gateway_id = aws_vpn_gateway.gcp_vpn_gw.id
}

resource "aws_customer_gateway" "gcp_customer_gw" {
  bgp_asn    = var.GCP_TUN_VPN_GW_ASN
  ip_address = google_compute_address.vpn_peer_ip.address
  type       = "ipsec.1"
  tags = merge(
    var.common_tags,
    { Name = "gcp_network_${data.google_compute_network.main.name}" },
  )
}

resource "aws_vpn_connection" "gcp_tunnel_connection" {
  vpn_gateway_id      = aws_vpn_gateway.gcp_vpn_gw.id
  customer_gateway_id = aws_customer_gateway.gcp_customer_gw.id
  type                = "ipsec.1"
  static_routes_only  = false
  tags = merge(
    var.common_tags,
    { Name = "gcp_network_${data.google_compute_network.main.name}" },
  )
}

