require_relative “../../cumuli”

namespace :cumuli do

namespace :project do
  desc "install submodules and run setup scripts based on the project.yml"
  task :setup do
    Cumuli::ProjectManager::Manager.new.setup
  end

  desc "copy database config and rerun setup scripts"
  task :config do
    Cumuli::ProjectManager::Manager.new.setup_projects
  end

  desc "publish Procfile from projects.yml"
  task :publish do
    Cumuli::ProjectManager::Manager.new.publish
  end
end

namespace :ps do
  namespace :kill do
    desc "kill all foreman related processes"
    task :all do
      ps = Cumuli::PS.new
      ps.kill(ps.foremans.map(&:pid))
    end

    desc "kill the first spawned foreman process"
    task :root do
      ps = Cumuli::PS.new
      ps.kill
    end
  end

  desc "kill the root process"
  task :kill => ['cumuli:ps:kill:root']

  namespace :int do
    desc "interrupt all foreman related processes"
    task :all do
      ps = Cumuli::PS.new
      ps.int(ps.foremans.map(&:pid))
    end

    desc "kill the first spawned foreman process"
    task :root do
      ps = Cumuli::PS.new
      ps.int
    end
  end

  desc "interrupt the root process"
  task :int => ['cumuli:ps:int:root']
end

desc "look at the list of foreman related processes"
task :ps do
  puts Cumuli::PS.new.report_all
end

desc "run a remote command with the right ruby: rake cumuli:remote ../my_app rake db:migrate"
task :remote do |command|
  Cumuli::CLI::RemoteRakeCommand.new(ARGV).perform
end

end