# -*- mode: ruby -*-
# vi: set ft=ruby :

# REFERENCES
# https://github.com/changx03/node-app-on-vagrant/blob/master/vagrant/Vagrantfile
# https://technoidentity.com/insights/build-a-nodejs-app-inside-a-virtualbox-vm-using-vagrant/
# https://semaphoreci.com/community/tutorials/getting-started-with-vagrant

# Documentation
# All Vagrant configuration is done below. The "2" in Vagrant.configure
# configures the configuration version (we support older styles for
# backwards compatibility). Please don't change it unless you know what
# you're doing.
Vagrant.configure("2") do |config|

    # The most common configuration options are documented and commented below.
    # For a complete reference, please see the online documentation at
    # https://docs.vagrantup.com.

    # Every Vagrant development environment requires a box. You can search for
    # boxes at https://vagrantcloud.com/search or https://app.vagrantup.com/generic
    # config.vm.box = "generic/ubuntu1804"
    config.vm.box = "generic/debian10"
    
    # Disable automatic box update checking. If you disable this, then
    # boxes will only be checked for updates when the user runs
    # `vagrant box outdated`. This is not recommended.
    # config.vm.box_check_update = false

    # Create a forwarded port mapping which allows access to a specific port
    # within the machine from a port on the host machine. In the example below,
    # accessing "localhost:8080" will access port 80 on the guest machine.
    # NOTE: This will enable public access to the opened port
    # config.vm.network "forwarded_port", guest: 80, host: 8080

    # Create a forwarded port mapping which allows access to a specific port
    # within the machine from a port on the host machine and only allow access
    # via 127.0.0.1 to disable public access
    # config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1"

    # Create a private network, which allows host-only access to the machine
    # using a specific IP.
    config.vm.network "private_network", ip: "192.168.33.100"
    
    # Create a public network, which generally matched to bridged network.
    # Bridged networks make the machine appear as another physical device on
    # your network.
    # config.vm.network "public_network"

    # Provider-specific configuration so you can fine-tune various
    # backing providers for Vagrant. These expose provider-specific options.
    # Example for VirtualBox:
    config.vm.provider "virtualbox" do |vb|
      vb.name = "desktopcgi-box"
        #   # Display the VirtualBox GUI when booting the machine
        #   vb.gui = true
      vb.memory = "512"
    end
    
    # Share an additional folder to the guest VM. The first argument is
    # the path on the host to the actual folder. The second argument is
    # the path on the guest to mount the folder. And the optional third
    # argument is a set of non-required options.
    # config.vm.synced_folder "../data", "/vagrant_data"
    # config.vm.synced_folder ".", "$HOME/desktopcgi", type: :virtualbox
    config.vm.synced_folder ".", "$HOME/desktopcgi"
    
    #
    # View the documentation for the provider you are using for more
    # information on available options.

    # Enable provisioning with a shell script. Additional provisioners such as
    # Puppet, Chef, Ansible, Salt, and Docker are also available. Please see the
    # documentation for more information about their specific syntax and use.
    # 
    # config.vm.provision "shell", inline: <<-SHELL
    #   apt-get update
    #   apt-get install -y apache2
    # SHELL
    # 
    # config.vm.provision "install-node", type: "shell", privileged: false do |s|
    #   s.path = "./install-node.sh"
    # end
    # 
    # config.vm.provision "vagrant_vm_script", type: "shell", privileged: false do |s|
    #   s.path = "./vagrant_vm_script.sh"
    # end

    config.vm.provision "shell", inline: <<-SHELL
      apt-get update
    #   https://git-scm.com/download/linux
      apt-get install -y git
    #   https://github.com/nodesource/distributions/blob/master/README.md#debinstall
      curl -fsSL https://deb.nodesource.com/setup_18.x -o nodesource_setup.sh
      bash nodesource_setup.sh
      apt-get install nodejs -y
      rm nodesource_setup.sh
    # Install node modules
      cd "$HOME/desktopcgi"
      rm -rf ./node_modules
      npm install --force
    # Install yarn
    #   curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add -
    #   echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list
    #   apt-get update
    #   apt-get install yarn -y
    SHELL
  
end