resource "aws_vpc" "ad_hoc" {
  count = var.vpc == "" ? 1 : 0
  cidr_block = "172.16.0.0/16"
  enable_dns_hostnames = true

  tags = merge({
    Name = "${var.name}-ad-hoc-vpc"
  }, var.tags)
}

resource "aws_internet_gateway" "ad_hoc" {
  vpc_id = var.vpc != "" ? var.vpc : aws_vpc.ad_hoc[0].id

  tags = merge({
    Name = "${var.name}-ad-hoc-gateway"
  }, var.tags)
}

resource "aws_route_table" "ad_hoc" {
  vpc_id = var.vpc != "" ? var.vpc : aws_vpc.ad_hoc[0].id

  route {
    cidr_block = "0.0.0.0/0"
    gateway_id = aws_internet_gateway.ad_hoc.id
  }

  tags = {
    Name = "Public Subnet Route Table."
  }
}


data "aws_availability_zones" "available" {}

resource "aws_subnet" "per_az" {
  count = length(data.aws_availability_zones.available.names)

  vpc_id            = var.vpc != "" ? var.vpc : aws_vpc.ad_hoc[0].id
  cidr_block        = cidrsubnet("172.16.0.0/16", 8, 32 + count.index)
  availability_zone = data.aws_availability_zones.available.names[count.index % length(data.aws_availability_zones.available.names)]

  tags = merge({
    Name = "${var.name}-created-subnet"
  }, var.tags)
}

resource "aws_route_table_association" "per_az" {
  count = length(data.aws_availability_zones.available.names)
  subnet_id = aws_subnet.per_az[count.index].id
  route_table_id = aws_route_table.ad_hoc.id
}
