include Fulmar::Domain::Service::Helper::CommonHelper

@versioned_servers = {}

config.each do |env, target, config|

@versioned_servers["#{env}:#{target}"] = config if config[:type].to_s == 'rsync_with_versions'

end

unless @versioned_servers.empty?

@versioned_servers.each_key do |env|
  target_count = @versioned_servers.keys.reduce(0) { |a, e| e.split(':').first == env.split(':').first ? a + 1 : a }

  task_environment = (target_count > 1 ? env : env.split(':').first)

  namespace :list do
    namespace :versions do
      # Count of there are multiple targets within the environment
      # if not, we can omit the target name in the task and shorten it a bit
      # This should apply for almost all cases.

      desc "List available versions for environment/target \"#{env}\""
      task task_environment do
        config.environment = env.split(':').first.to_sym
        config.target = env.split(':').last.to_sym
        file_sync.list_releases(false).each { |item| puts item }
      end
    end
  end

  namespace :clean do
    namespace :versions do
      desc "Delete obsolete versions for target \"#{env}\""
      task task_environment do
        config.environment = env.split(':').first.to_sym
        config.target = env.split(':').last.to_sym
        file_sync.cleanup
      end
    end
  end

  namespace :revert do
    namespace :versions do
      desc "Revert to the previous version for \"#{env}\""
      task task_environment do
        config.environment = env.split(':').first.to_sym
        config.target = env.split(':').last.to_sym
        error 'Cannot revert to previous version.' unless file_sync.revert
      end
    end
  end
end

end