locals {
  az_count        = length(var.availability_zones)
  subnet_newbits  = ceil(log(local.az_count * 2, 2))
  subnets         = [for i in range(local.az_count * 2) : cidrsubnet(var.vpc.cidr, local.subnet_newbits, i)]
  public_subnets  = slice(local.subnets, 0, local.az_count)
  private_subnets = slice(local.subnets, local.az_count, local.az_count * 2)
}

module "vpc" {
  source  = "terraform-aws-modules/vpc/aws"
  version = "~> 6.0"

  name            = "${local.name}-vpc"
  cidr            = var.vpc.cidr
  azs             = var.availability_zones
  private_subnets = local.private_subnets
  public_subnets  = local.public_subnets

  enable_nat_gateway         = true
  single_nat_gateway         = true
  manage_default_network_acl = false
  public_subnet_tags = {
    "kubernetes.io/role/elb"              = "1"
    "kubernetes.io/cluster/${local.name}" = "shared"
    "SubnetType"                          = "Public"
  }
  private_subnet_tags = {
    "kubernetes.io/role/internal-elb"     = "1"
    "kubernetes.io/cluster/${local.name}" = "shared"
    "SubnetType"                          = "Private"
  }

  tags = {
    environment = var.env
    usedby      = "dbaas-control-plane-seed"
    servicetype = "premium"
    tenant      = "admin"
  }
}

data "aws_route_tables" "rts" {
  vpc_id = module.vpc.vpc_id
}

locals {
  vpc_route_table_ids = sort(data.aws_route_tables.rts.ids)
}
