Rake::Task.define_task :environment unless Rake::Task.task_defined?(:environment)

namespace :ridgepole do

desc '`ridgepole --apply`'
task apply: :environment do
  RidgepoleRake::Tasks.apply
end

desc '`ridgepole --apply --dry-run`'
namespace :apply do
  task 'dry-run' => :environment do
    RidgepoleRake::Tasks.apply(true)
  end
end

desc '`ridgepole --merge`'
task :merge, [:file] => :environment do |_t, args|
  raise 'Require table schema file or execution file' if args.file.blank?

  RidgepoleRake::Tasks.merge(args.file)
end

desc '`ridgepole --merge --dry-run`'
namespace :merge do
  task 'dry-run', [:file] => :environment do |_t, args|
    raise 'Require table schema file or execution file' if args.file.blank?

    RidgepoleRake::Tasks.merge(args.file, true)
  end
end

desc '`ridgepole --export`'
task export: :environment do
  RidgepoleRake::Tasks.export
end

desc '`ridgepole --diff` current db and schema file'
task diff: :environment do
  RidgepoleRake::Tasks.diff
end

if defined?(ActiveRecord)
  desc '`rake db:drop`, `rake db:create` and `ridgepole --apply`'
  task reset: :environment do
    ActiveRecord::Tasks::DatabaseTasks.drop_current
    ActiveRecord::Tasks::DatabaseTasks.create_current
    RidgepoleRake::Tasks.apply
  end
end

end