namespace :eye do

desc 'Load eye config'
task :load do
  on roles(fetch(:eye_roles)) do
    with fetch(:eye_env) do
      within fetch(:eye_work_dir) do
        execute :eye, :load, fetch(:eye_config)
      end
    end
  end
end

[:start, :stop, :restart].each do |cmd|
  desc "Run 'eye #{cmd}'"
  task cmd do
    on roles(fetch(:eye_roles)) do
      with fetch(:eye_env) do
        within fetch(:eye_work_dir) do
          execute :eye, cmd, fetch(:eye_application)
        end
      end
    end
  end
end

task :info do
  desc 'Show application status'
  on roles(fetch(:eye_roles)) do |server|
    puts server.hostname
    with fetch(:eye_env) do
      within fetch(:eye_work_dir) do
        puts capture(:eye, :info, fetch(:eye_application))
      end
    end
  end
end

task :quit do
  desc 'Quit eye'
  on roles(fetch(:eye_roles)) do |server|
    with fetch(:eye_env) do
      within(release_path) do
        execute :eye, :quit
      end
    end
  end
end

before :start, :load
before :restart, :load

end

namespace :load do

task :defaults do
  set :eye_roles, :app
  set :eye_env, -> { { rails_env: fetch(:rails_env) || fetch(:stage) } }
  set :eye_application, -> { fetch(:application) }
  set :eye_config, -> { "./config/#{fetch(:application)}.eye" }
  set :eye_work_dir, -> { release_path }

  # Rbenv, Chruby, and RVM integration
  set :rbenv_map_bins, fetch(:rbenv_map_bins).to_a << 'eye'
  set :rvm_map_bins, fetch(:rvm_map_bins).to_a << 'eye'
  set :chruby_map_bins, fetch(:chruby_map_bins).to_a << 'eye'
  # Bundler integration
  set :bundle_bins, fetch(:bundle_bins).to_a << 'eye' if defined?(Eye)
end

end