# frozen_string_literal: true

namespace :db do

desc "Reset DataBase for environment and test"
task :reset do
  Rake::Task["db:drop"].invoke
  Rake::Task["db:create"].invoke
  Rake::Task["db:migrate"].invoke
  Rake::Task["db:seed"].invoke
  sh "rake db:test:prepare"
end

desc "Backup the database tp tmp/db.sql file"
task backup: :get_db_config do
  if @url
    sh "pg_dump -d #{@url} -f #{filename}"
  else
    sh "export PGPASSWORD=#{@password} && pg_dump #{@database} --host #{@host} --port #{@port} -U #{@username} -f #{@default_filename}"
  end
end

desc "Restore the database from tmp/db.sql file if no one is passed"
task restore: %i[drop create get_db_config] do
  sh "export PGPASSWORD=#{@password} && psql -d #{@database} -U #{@username} -h #{@host} --port #{@port} < #{filename}"
end

end

task :get_db_config do

config = if Rails.env.production?
           Rails.configuration.database_configuration[Rails.env]["primary"]
         else
           Rails.configuration.database_configuration[Rails.env]
         end

@host = config["host"]
@port = config["port"]
@database = config["database"]
@username = config["username"]
@password = config["password"]
@url = config["url"]

@default_filename = "tmp/db.sql"

end

def filename

name = ARGV[1]
unless name.nil?
  task name.to_sym do
  end
end
name || @default_filename

end