locals {
  name_prefix = "novus-${var.environment}"

  is_production = var.environment == "prod"

  # for expression over a map, producing a map
  subnet_cidrs = { for key, value in var.subnets : key => value.cidr }

  # for expression with a filter, producing a list
  public_subnets = [for key, value in var.subnets : key if value.public]

  base_tags = {
    managed_by  = "terraform"
    environment = var.environment
  }

  sizing = local.is_production ? {
    instance_size = "large"
    replicas      = 6
  } : {
    instance_size = "small"
    replicas      = 2
  }

  ingress_rules = [
    { port = 80, protocol = "tcp", description = "http" },
    { port = 443, protocol = "tcp", description = "https" },
  ]
}

resource "examplecloud_firewall" "app" {
  name       = "${local.name_prefix}-fw"
  network_id = examplecloud_network.main.id

  dynamic "rule" {
    for_each = local.ingress_rules

    content {
      port        = rule.value.port
      protocol    = rule.value.protocol
      description = rule.value.description
      cidr_blocks = local.is_production ? ["10.20.0.0/16"] : ["0.0.0.0/0"]
    }
  }

  tags = merge(local.base_tags, var.tags)
}
