resource "examplecloud_network" "main" {
  name       = "novus-${var.environment}-net"
  cidr_block = "10.20.0.0/16"

  tags = merge(var.tags, {
    environment = var.environment
  })
}

resource "examplecloud_subnet" "app" {
  for_each = var.subnets

  network_id = examplecloud_network.main.id
  name       = each.key
  cidr_block = each.value.cidr
  zone       = each.value.zone
  public     = each.value.public
}

data "examplecloud_image" "base" {
  family      = "example-linux-1"
  most_recent = true
}

resource "examplecloud_instance" "app" {
  count = var.instance_count

  name      = format("app-%02d", count.index + 1)
  size      = var.instance_size
  image_id  = data.examplecloud_image.base.id
  subnet_id = examplecloud_subnet.app["app-a"].id

  metadata = {
    role  = "app"
    index = count.index
  }

  lifecycle {
    create_before_destroy = true
    ignore_changes        = [metadata["index"]]
  }

  depends_on = [examplecloud_network.main]
}

resource "examplecloud_bucket" "artifacts" {
  provider = examplecloud.secondary

  name          = "novus-${var.environment}-artifacts"
  versioning    = true
  force_destroy = false
}
