#!/usr/bin/env ruby
require "fileutils"
require 'yaml'
require 'optparse'

options = {}
settings = YAML.load_file("config/app_settings.yml")
OptionParser.new do |opt|
  settings.each_key do |key|
    opt.on("--#{key} VALUE") { |o| options[key.to_sym] = o }
  end
end.parse!

# path to your application root.
APP_ROOT = File.expand_path("..", __dir__)

def system!(*args)
  system(*args) || abort("\n== Command #{args} failed ==")
end

FileUtils.chdir APP_ROOT do
  # This script is a way to set up or update your development environment automatically.
  # This script is idempotent, so that you can run it at any time and get an expectable outcome.
  # Add necessary setup steps to this file.

  puts "== Installing dependencies =="
  system! "gem install bundler --conservative"
  system("bundle check") || system!("bundle install")

  puts "== Installing node_modeules =="
  system! "yarn install"

  # puts "\n== Copying sample files =="
  # unless File.exist?("config/database.yml")
  #   FileUtils.cp "config/database.yml.sample", "config/database.yml"
  # end

  puts "\n== Copying env file =="
  unless File.exist?(".env")
    FileUtils.cp ".env.sample", ".env"
  end

  puts "\n== Copying app settings config =="

  settings = settings.tap do |setting|
    setting.each do |key, value|
      value["default"] = options[key.to_sym] || value["default"]
    end
  end

  File.write('config/app_settings.yml', settings.to_yaml)

  puts "\n== Preparing database =="
  system! "bin/rails db:prepare"

  puts "\n== Removing old logs and tempfiles =="
  system! "bin/rails log:clear tmp:clear"

  puts "\n== Restarting application server =="
  system! "bin/rails restart"
end
