# SPDX-FileCopyrightText: 2026 Daniel Feito-Pin <danielfeitopin+github@protonmail.com>
#
# SPDX-License-Identifier: GPL-2.0-only

Vagrant.configure("2") do |config|
  box = "generic/alpine319"
  version = "4.3.12"
  
  subnet = "192.168.56"
  ip_broker = "#{subnet}.10"
  ip_subscriber = "#{subnet}.11"
  ip_publisher = "#{subnet}.12"
  
  provision_dir = "provision"
  provision_files_dir = "#{provision_dir}/files"

  # Broker
  config.vm.define "mqtt-broker" do |broker|
    broker.vm.box = box
    broker.vm.box_version = version
    broker.vm.hostname = "mqtt-broker"
    broker.vm.network "private_network", ip: ip_broker

    broker.vm.provision "file",
      source: "#{provision_files_dir}/common/",
      destination: "/tmp/provision_files"

    broker.vm.provision "file",
      source: "#{provision_files_dir}/broker/", 
      destination: "/tmp/provision_files"

    broker.vm.provision "shell", 
      path: "provision/broker.sh"
  end

  # Subscriber
  config.vm.define "mqtt-subscriber" do |subscriber|
    subscriber.vm.box = box
    subscriber.vm.box_version = version
    subscriber.vm.hostname = "mqtt-subscriber"
    subscriber.vm.network "private_network", ip: ip_subscriber

    subscriber.vm.provision "file",
      source: "#{provision_files_dir}/common/",
      destination: "/tmp/provision_files"
    
    subscriber.vm.provision "file",
      source: "#{provision_files_dir}/subscriber/",
      destination: "/tmp/provision_files"
    
    subscriber.vm.provision "shell", 
      path: "#{provision_dir}/subscriber.sh",
      env: { "BROKER_IP" => ip_broker }
  end

  # Publisher
  config.vm.define "mqtt-publisher" do |publisher|
    publisher.vm.box = box
    publisher.vm.box_version = version
    publisher.vm.hostname = "mqtt-publisher"
    publisher.vm.network "private_network", ip: ip_publisher

    publisher.vm.provision "file",
      source: "#{provision_files_dir}/common/",
      destination: "/tmp/provision_files"
    
    publisher.vm.provision "file",
      source: "#{provision_files_dir}/publisher/",
      destination: "/tmp/provision_files"

    publisher.vm.provision "shell",
      path: "#{provision_dir}/publisher.sh",
      env: { "BROKER_IP" => ip_broker }
  end

end
