# encoding : utf-8

namespace :cassandra do

task :start do
  CassandraMigrations::Cassandra.start!
end

desc 'Create the keyspace in config/cassandra.yml for the current environment'
task :create do
  begin
    CassandraMigrations::Cassandra.start!
    puts "Keyspace #{CassandraMigrations::Config.keyspace} already exists!"
  rescue CassandraMigrations::Errors::UnexistingKeyspaceError
    CassandraMigrations::Cassandra.create_keyspace!(Rails.env)
    puts "Created keyspace #{CassandraMigrations::Config.keyspace}"
  end
end

desc 'Drop keyspace in config/cassandra.yml for the current environment'
task :drop do
  begin
    CassandraMigrations::Cassandra.drop_keyspace!(Rails.env)
    puts "Dropped keyspace #{CassandraMigrations::Config.keyspace}"
  rescue CassandraMigrations::Errors::UnexistingKeyspaceError
    puts "Keyspace #{CassandraMigrations::Config.keyspace} does not exist... cannot be dropped"
  end
end

desc 'Migrate the keyspace to the latest version'
task :migrate => :start do
  migrations_up_count = CassandraMigrations::Migrator.up_to_latest!

  if migrations_up_count == 0
    puts "Already up-to-date"
  else
    puts "Migrated #{migrations_up_count} version(s) up."
  end
end

desc 'Rolls the schema back to the previous version (specify steps w/ STEP=n)'
task :rollback => :start do
  steps = (ENV['STEP'] ? ENV['STEP'].to_i : 1)

  migrations_down_count = CassandraMigrations::Migrator.rollback!(steps)

  if steps == migrations_down_count
    puts "Rolled back #{steps} version(s)."
  else
    puts "Asked to rollback #{steps} version(s). Only achieved #{migrations_down_count}."
  end
end

namespace :migrate do
  desc 'Resets and prepares cassandra database (all data will be lost)'
  task :reset do
    Rake::Task['cassandra:drop'].execute
    Rake::Task['cassandra:create'].execute
    Rake::Task['cassandra:migrate'].execute
  end
end

task :setup do
  puts "DEPRECATION WARNING: `cassandra:setup` rake task has been deprecated, use `cassandra:migrate:reset` instead"
  Rake::Task['cassandra:create'].execute
  Rake::Task['cassandra:migrate'].execute
end

namespace :test do
  desc 'Load the development schema in to the test keyspace via a full reset'
  task :prepare do
    Rails.env = 'test'
    Rake::Task['cassandra:migrate:reset'].execute
  end
end

desc 'Retrieves the current schema version number'
task :version => :start do
  puts "Current version: #{CassandraMigrations::Migrator.read_current_version}"
end

task

end