# frozen_string_literal: true

uptimelink_root = ENV.fetch('UPTIMELINK_ROOT', File.expand_path('..', __dir__))
controller_ip = ENV.fetch('UPTIMELINK_VAGRANT_CONTROLLER_IP', '192.168.56.10')
runner_ip = ENV.fetch('UPTIMELINK_VAGRANT_RUNNER_IP', '192.168.56.11')
controller_port = ENV.fetch('UPTIMELINK_VAGRANT_CONTROLLER_PORT', '8080')
runner_id = ENV.fetch('UPTIMELINK_VAGRANT_RUNNER_ID', 'vagrant-runner-1')
runner_token = ENV.fetch('UPTIMELINK_VAGRANT_RUNNER_TOKEN', 'vagrant-token')
target_port = ENV.fetch('UPTIMELINK_VAGRANT_TARGET_PORT', '18081')

Vagrant.configure('2') do |config|
  config.vm.box = ENV.fetch('UPTIMELINK_VAGRANT_BOX', 'bento/ubuntu-24.04')

  config.vm.synced_folder '.', '/vagrant', disabled: true
  config.vm.synced_folder uptimelink_root, '/uptime.link',
    type: 'rsync',
    owner: 'vagrant',
    group: 'vagrant',
    rsync__auto: false,
    rsync__exclude: [
      '.git/',
      '.nogit/',
      '.vagrant/',
      'node_modules/',
      '**/.git/',
      '**/.nogit/',
      '**/.vagrant/',
      '**/node_modules/',
      '**/.cache/',
      '**/.pnpm-store/',
      '**/dist/',
      '**/dist_*/',
    ]

  config.vm.provider 'virtualbox' do |vb|
    vb.cpus = ENV.fetch('UPTIMELINK_VAGRANT_CPUS', '2').to_i
    vb.memory = ENV.fetch('UPTIMELINK_VAGRANT_MEMORY', '2048').to_i
  end

  config.vm.provider 'libvirt' do |lv|
    lv.cpus = ENV.fetch('UPTIMELINK_VAGRANT_CPUS', '2').to_i
    lv.memory = ENV.fetch('UPTIMELINK_VAGRANT_MEMORY', '2048').to_i
  end

  config.vm.define 'controller', primary: true do |controller|
    controller.vm.hostname = 'uptime-controller'
    controller.vm.network 'private_network', ip: controller_ip
    controller.vm.provision 'shell', path: 'scripts/provision-common.sh'
  end

  config.vm.define 'runner' do |runner|
    runner.vm.hostname = 'uptime-runner'
    runner.vm.network 'private_network', ip: runner_ip
    runner.vm.provision 'shell', path: 'scripts/provision-common.sh'
    runner.vm.provision 'shell', path: 'scripts/provision-runner.sh', env: {
      'UPTIMELINK_CONTROLLER_URL' => "http://#{controller_ip}:#{controller_port}",
      'UPTIMELINK_RUNNER_ID' => runner_id,
      'UPTIMELINK_RUNNER_TOKEN' => runner_token,
      'UPTIMELINK_TARGET_PORT' => target_port,
    }
  end
end
