namespace :sync do

desc 'sync files from production'
task :sync_files_from_production do
  on roles(:allow_syncfiles) do
    if fetch(:t3_live_sync)['filesync']
      fetch(:t3_live_sync)['filesync'].each do |key,command|
        execute "cd #{fetch(:deploy_to)} && #{command}"
      end
    end
  end
end

desc 'sync database from production and run sql updates'
task :sync_db_from_production do
  on roles(:allow_syncdatabase) do

    ignorestring = ""

    if(:t3_db_sync_ignore_tables)

      fetch(:t3_db_sync_ignore_tables).each do | ignore_tbl |
        ignorestring = "#{ignorestring} --ignore-table=#{fetch(:t3_live_sync)['dbsync']['dbname']}.#{ignore_tbl}"
      end
    end

    # DUMP DATABASE TO IMAGE
    execute <<DBSYNC1
      ssh #{fetch(:t3_live_sync)['dbsync']['ssh_user']}@#{fetch(:t3_live_sync)['dbsync']['ssh_server']} \
      'mysqldump -u#{fetch(:t3_live_sync)['dbsync']['dbuser']} \
      -h#{fetch(:t3_live_sync)['dbsync']['dbhost']} \
      -p#{fetch(:t3_live_sync)['dbsync']['dbpass']} \
      #{ignorestring} \
      #{fetch(:t3_live_sync)['dbsync']['dbname']} > /tmp/.captypo3dump-src-#{fetch(:t3_live_sync)['dbsync']['dbname']}'

DBSYNC1

if(:t3_db_sync_ignore_tables)
  fetch(:t3_db_sync_ignore_tables).each do | ignore_tbl |

    execute <<DBSYNC1
  ssh #{fetch(:t3_live_sync)['dbsync']['ssh_user']}@#{fetch(:t3_live_sync)['dbsync']['ssh_server']} \
  'mysqldump -u#{fetch(:t3_live_sync)['dbsync']['dbuser']} \
  -h#{fetch(:t3_live_sync)['dbsync']['dbhost']} \
  -p#{fetch(:t3_live_sync)['dbsync']['dbpass']} \
  --no-data \
    #{fetch(:t3_live_sync)['dbsync']['dbname']} #{ignore_tbl} >> /tmp/.captypo3dump-src-#{fetch(:t3_live_sync)['dbsync']['dbname']}'

DBSYNC1

  end
end

# COMPRESS IMAGE
execute <<DBSYNC2
  ssh #{fetch(:t3_live_sync)['dbsync']['ssh_user']}@#{fetch(:t3_live_sync)['dbsync']['ssh_server']} \
  'gzip -f /tmp/.captypo3dump-src-#{fetch(:t3_live_sync)['dbsync']['dbname']}'

DBSYNC2

# TRANSFER IMAGE
execute <<DBSYNC3
  scp #{fetch(:t3_live_sync)['dbsync']['ssh_user']}@#{fetch(:t3_live_sync)['dbsync']['ssh_server']}:/tmp/.captypo3dump-src-#{fetch(:t3_live_sync)['dbsync']['dbname']}.gz \
  /tmp/.captypo3dump-dest-#{fetch(:t3_live_sync)['dbsync']['dbname']}.gz

DBSYNC3

# DECOMPRESS IMAGE
execute <<DBSYNC4
  gunzip -f /tmp/.captypo3dump-dest-#{fetch(:t3_live_sync)['dbsync']['dbname']}.gz

DBSYNC4

# IMPORT AND REMOVE IMAGE
execute <<DBSYNC5
  mysql -u#{fetch(:dbuser)} -h#{fetch(:dbhost)} -p#{fetch(:dbpass)} #{fetch(:dbname)} < /tmp/.captypo3dump-dest-#{fetch(:t3_live_sync)['dbsync']['dbname']} && \
  rm -f /tmp/.captypo3dump-dest-#{fetch(:t3_live_sync)['dbsync']['dbname']}

DBSYNC5

# REMOVE IMAGE
execute <<DBSYNC6
  ssh #{fetch(:t3_live_sync)['dbsync']['ssh_user']}@#{fetch(:t3_live_sync)['dbsync']['ssh_server']} \
  'rm -f /tmp/.captypo3dump-src-#{fetch(:t3_live_sync)['dbsync']['dbname']}.gz'

DBSYNC6

  end

  invoke 'sync:sql_updates'
end

desc 'run necessary sql queries for environment'
task :sql_updates do
  on roles(:allow_syncdatabase) do
    if fetch(:sql_updates)
      fetch(:sql_updates).each do |command|
        execute DT3MySQL::mysql_execute(command)
      end
    end
  end
end

end