variable "project" {
  description = "Project ID."
  type        = string
}

variable "region" {
  description = "Region."
  type        = string
}

output "private_network_id" {
  description = "Private network id."
  value       = google_compute_network.private_network.id
}

output "private_subnetwork_id" {
  description = "Private subnetwork id."
  value       = google_compute_subnetwork.subnet.id
}

resource "google_project_service" "servicenetworking" {
  project                    = var.project
  service                    = "servicenetworking.googleapis.com"
  disable_dependent_services = true
}

resource "google_compute_network" "private_network" {
  project                 = var.project
  name                    = "private-network"
  auto_create_subnetworks = false
  depends_on = [
    google_project_service.servicenetworking
  ]
}

resource "google_compute_subnetwork" "subnet" {
  project       = google_compute_network.private_network.project
  name          = "private-subnetwork"
  ip_cidr_range = "10.100.0.0/16"
  region        = var.region
  network       = google_compute_network.private_network.id
}

resource "google_compute_global_address" "private_ip_address" {
  project       = google_compute_network.private_network.project
  name          = "private-ip-address"
  purpose       = "VPC_PEERING"
  address_type  = "INTERNAL"
  prefix_length = 16
  network       = google_compute_network.private_network.id
}

resource "google_service_networking_connection" "private_vpc_connection" {
  network                 = google_compute_network.private_network.id
  service                 = "servicenetworking.googleapis.com"
  reserved_peering_ranges = [google_compute_global_address.private_ip_address.name]
}