require 'rake' require 'colorize' require 'rake-progressbar' require 'mysql_to_pg_dump/tasks_helper'

namespace :db do

include MysqlToPgDump::TasksHelper

desc "Copies db content from production " \
     "server into tmp/db_server_data"
task pull: :environment do
  ARGV.each { |a| task a.to_sym do ; end }
  server_addr =
    ARGV[1].to_s.blank? ? server_addr_input : ARGV[1].to_s

  if server_addr.include?("@")
    bar = RakeProgressbar.new(db_tables.size)
    tmp_location = uniq_dir_location

    system "ssh #{server_addr} 'mkdir -p #{tmp_location}'"
    db_tables.each do |table|
      system %{ssh #{server_addr} "echo '#{sql_select(table)}' | #{login_to_mysql} > #{file_to_save(table, tmp_location)}"}
      bar.inc
    end
    bar.finished

    system "scp -r #{server_addr}:#{tmp_location}/* tmp/db_server_data"
    system "ssh #{server_addr} 'rm -rf #{tmp_location}'"

    printf "Db data from production server " \
           "has been pulled successfully\n".green
  else
    printf "No server address given. " \
           "Expecting format is 'server@123.4.5.6'\n".yellow
  end
end

namespace :pull do
  desc "Replaces current db data to pulled"
  task load: :environment do
    ARGV.each { |a| task a.to_sym do ; end }
    confirm_input =
      ARGV[1].to_s.blank? ? bash_confirm_input : ARGV[1].to_s

    if confirm_input == ('y' || 'yes')
      if data_already_pulled?
        clean_database
        db_tables.each do |t|
          system %(psql -d #{dev['database']} -c "#{psql_import_query(t)} #{psql_set_sequence(t)}")
        end
        printf "Your db data now is equal to production\n".green
      else
        printf "No pulled data. Run 'rake db:pull' first\n".yellow
      end
    else
      printf "Canceled\n".blue
    end
  end

  desc "Deletes pulled db data from local tmp/db_server_data"
  task :clean do
    system 'rm -f tmp/db_server_data/*'
    printf "Pulled db data has been " \
           "deleted from /tmp successfully\n".green
  end

  desc "Pulls remote mysql db data and loads it to local psql"
  task reload: ["db:pull", 'db:pull:load']

  desc "Pulls remote mysql db data, then loads it to " \
       "local postgres and cleans junk"
  task force: ['db:pull:reload', 'db:pull:clean']
end

end