require 'pp' require 'synchronizer'

include DB include Assets include Helper

desc 'copies database and assets to destination' task :sync do

invoke 'sync:db:transfer'
invoke 'sync:assets:transfer'

end

namespace :sync do

desc 'syncs db and assets to local'
task :local do
  invoke 'sync:db:to_local'
  invoke 'sync:assets:to_local'
end

namespace :local do
  desc 'syncs db and assets to local (keep remote dumps)'
  task :keep do
    invoke 'sync:db:to_local:keep'
    invoke 'sync:assets:to_local:keep'
  end
end

desc 'dumps the database and copies the dump to destination stage'
task :db do
  invoke 'sync:db:transfer'
end

desc 'tars assets and copies the archive to destination stage'
task :assets do
  invoke 'sync:assets:transfer'
end

#desc 'restores assets and database on destination host'
#task :restore do
#  invoke 'sync:db:restore'
#  invoke 'sync:assets:unpack'
#end

namespace :db do

  desc 'dump database'
  task :dump do
    on roles :db do
      info 'dumping database'
      dump_db
      info 'finished dumping'
    end
  end

  desc 'create db-dump and copy to local'
  task :to_local do
    on roles :db do
      invoke 'sync:db:dump'
      copy_db_to_local
      invoke 'sync:db:clean_dumps'
    end
  end

  namespace :to_local do
    desc 'create db-dump and copy to local (but keep remote dump)'
    task :keep do
      on roles :db do
        invoke 'sync:db:dump'
        copy_db_to_local
      end
    end
  end

  desc 'copy database dump to other stage'
  task :transfer do
    on roles :db do |host|
      invoke 'sync:db:dump'
      info "copying database dump from #{host} to other stage #{fetch(:sync_db_to)}"
      copy_db_cmd
    end
  end

  task :clean_dumps do
    on roles :db do
      clean_db_dump
    end
  end
end

namespace :assets do

  desc 'copies asets to destination'
  task :transfer do
    on roles :web do
      invoke 'sync:assets:pack'
      info "copying assets to destination #{fetch(:sync_assets_to)}"
      copy_assets_cmd
    end
  end

  desc 'copy assets to local'
  task :to_local do
    on roles :web do
      invoke 'sync:assets:pack'
      copy_assets_to_local
      invoke 'sync:assets:clean_dumps'
    end
  end

  namespace :to_local do
    desc 'copy assets to local (but keep artifacts remotely)'
    task :keep do
      on roles :web do
        invoke 'sync:assets:pack'
        copy_assets_to_local
      end
    end
  end

  #desc 'pack, copy and unpack assets on other stage'
  #task :unpack do
  #  on roles :web do
  #    invoke 'sync:assets:copy'
  #    info 'unpacking assets'
  #  end
  #end

  #desc 'pack assets'
  task :pack do
    on roles :web do
      pack_assets
    end
  end

  task :clean_dumps do
    on roles :web do
      clean_assets_dump
    end
  end
end

end