namespace :deploy do
namespace :appdata do
  require_relative '../../lib/optimacms/appdata/settings'


  task :check do
    on roles(:app) do
      within release_path do
        with rails_env: fetch(:rails_env) do
          execute :rake, "appdata:check"
        end
      end
    end
  end

  task :setup do
    on roles(:app) do
      within release_path do
        with rails_env: fetch(:rails_env) do
          execute :rake, "appdata:setup_all"
        end
      end
    end
  end


  ###
=begin
  task :upload do
    # variant. upload using local cache of git repo
    d_repo = Optimacms::Appdata::Settings.appdata_repo_path(release_path, app_env)
    git_repo = Optimacms::Appdata::Settings.repo_app_site_data(app_env)

    # init local repo
    %x(mkdir -p #{d_repo})
    %x(cd #{d_repo} && git init)
    %x(cd #{d_repo} && git remote add origin #{git_repo})

    # pull
    %x(cd #{d_repo} && git pull origin master)

    # copy
    Optimacms::Appdata::Settings.site_app_data_dirs.each do |d|
      d_server_base = File.dirname(d)

      #puts "from #{d} to #{d_server_base}"
      #exit
      upload!(d+"/", "#{current_path}/"+d_server_base+"/", :recursive => true)
    end




  end
=end

  # variant1. upload directly to server
=begin
    on roles(:app) do
      AppSettings.site_app_data_dirs.each do |d|
        d_server_base = File.dirname(d)

        #puts "from #{d} to #{d_server_base}"
        #exit
        upload!(d+"/", "#{current_path}/"+d_server_base+"/", :recursive => true)
      end

      # commit to remote repo
      Rake::Task["deploy:appdata:server_save"].invoke

      #
      Rake::Task["deploy:restart"].invoke

    end
=end


  task :server_save do
    name = ENV['name']

    on roles(:app) do
      within release_path do
        #with fetch(:bundle_env_variables, {}) do
        with rails_env: fetch(:rails_env) do
          execute :rake, "appdata:save['#{name}']"
        end
      end
    end
  end


  task :server_update do
    name = ENV['name']

    on roles(:app) do
      within release_path do
        with rails_env: fetch(:rails_env) do
          execute :rake, "appdata:update['#{name}']"
          #execute :bundle, 'exec', "rake appdata:update"
          #execute "cd #{release_path} && RAILS_ENV=#{e} bundle exec rake appdata:update"
          #execute "RAILS_ENV=#{e} rake appdata:update"
        end
      end
    end
  end




#### OLD
=begin
  task :server_save do
    on roles(:app) do
      p = File.join(shared_path, '..', 'repo-data')

      # rsync to repo-data
      #rsync -Lavrt --exclude-from '../{{server}}/files/rsync_exclude_list.txt' -e 'ssh -p {{ansible_ssh_port | default(22)}}'  {{root_user}}@{{inventory_hostname | quote}}:{{remote_path | quote}} {{backup_dir | quote }}
      #rsync -Lavrt --exclude-from '../{{server}}/files/rsync_exclude_list.txt' {{root_user}}@{{inventory_hostname}}:{{remote_path}} {{backup_dir}}


      # ok
      #execute "rsync -Lavrt --exclude-from '#{release_path}/.rsync_ignore' #{release_path}/ #{p}"

      # ok - app
      execute "rsync -Lavrt --exclude-from '#{release_path}/.rsync_ignore' #{release_path}/app/ #{p}/app"

      # commit & push to remote repo
      execute %Q(cd #{p} && git add . && git commit -m "server changes #{Time.now.utc}") rescue true
      execute %Q(cd #{p} && git push origin master) rescue true

      #git add -A .

    end
  end

  task :server_update do
    on roles(:web) do
      p = File.join(shared_path, '..', 'repo-data')
      execute %Q(cd #{p} && git pull origin master)
    end
  end

=end


end
end