namespace :load do

task :defaults do
  set :clockwork_default_hooks, -> { true }
  set :clockwork_file, -> { "lib/clockwork.rb" }
  set :clockwork_role, -> { :app }
end

end

namespace :deploy do

before :starting, :check_sidekiq_hooks do
  invoke 'clockwork:add_default_hooks' if fetch(:clockwork_default_hooks)
end
after :publishing, :restart_sidekiq do
  invoke 'clockwork:restart' if fetch(:clockwork_default_hooks)
end

end

namespace :clockwork do

desc "Stop clockwork"
task :stop do
  on roles(fetch(:clockwork_role)) do
    within release_path do
      with rails_env: fetch(:rails_env) do
        execute :bundle, :exec, :clockworkd, "-c #{fetch(:clockwork_file)} --dir=. --pid-dir=#{cw_pid_dir} --log-dir=#{cw_log_dir} --log stop"
      end
    end
  end
end

desc "Clockwork status"
task :status do
  on roles(fetch(:clockwork_role)) do
    within release_path do
      with rails_env: fetch(:rails_env) do
        execute :bundle, :exec, :clockworkd, "-c #{fetch(:clockwork_file)} --dir=. --pid-dir=#{cw_pid_dir} --log-dir=#{cw_log_dir} --log status"
      end
    end
  end
end

desc "Start clockwork"
task :start do
  on roles(fetch(:clockwork_role)) do
    within release_path do
      with rails_env: fetch(:rails_env) do
        execute :bundle, :exec, :clockworkd, "-c #{fetch(:clockwork_file)} --dir=. --pid-dir=#{cw_pid_dir} --log-dir=#{cw_log_dir} --log start"
      end
    end
  end
end

desc "Restart clockwork"
task :restart do
  on roles(fetch(:clockwork_role)) do
    within release_path do
      with rails_env: fetch(:rails_env) do
        execute :bundle, :exec, :clockworkd, "-c #{fetch(:clockwork_file)} --dir=. --pid-dir=#{cw_pid_dir} --log-dir=#{cw_log_dir} --log restart"
      end
    end
  end
end

def cw_log_dir
  "#{shared_path}/log"
end
def cw_pid_dir
  "#{shared_path}/tmp/pids"
end

def rails_env
  fetch(:rails_env, false) ? "RAILS_ENV=#{fetch(:rails_env)}" : ''
end

task :add_default_hooks do
  after 'deploy:publishing', 'clockwork:restart'
end

end