require 'active_record'

jruby = defined?(RUBY_ENGINE) && RUBY_ENGINE == 'jruby'

SPEC_ADAPTER = ENV['ADAPTER'] || 'postgresql'
SPEC_ADAPTER = 'jdbc' + SPEC_ADAPTER if jruby

require 'yaml'
db_config = YAML.load_file(File.expand_path("config/database.yml", File.dirname(__FILE__)))

if db_config[SPEC_ADAPTER].nil?
  puts "No such adapter '#{SPEC_ADAPTER}'. Valid adapters are #{db_config.keys.join(', ')}."
  exit 1
end

if ENV['TRAVIS']
  db_config[SPEC_ADAPTER]['username'] = 'postgres'
else
  require 'etc'
  username = SPEC_ADAPTER =~ /mysql/ ? 'root' : Etc.getlogin
  db_config[SPEC_ADAPTER]['username'] = username
end

puts "Using #{SPEC_ADAPTER} adapter."

ActiveRecord::Base.configurations = { "test" => db_config[SPEC_ADAPTER] }
ActiveRecord::Base.establish_connection(db_config[SPEC_ADAPTER])

require 'generators/templates/add_rpush'
require 'generators/templates/rpush_2_0_0_updates'
require 'generators/templates/rpush_2_1_0_updates'
require 'generators/templates/rpush_2_6_0_updates'
require 'generators/templates/rpush_2_7_0_updates'
require 'generators/templates/rpush_3_0_0_updates'
require 'generators/templates/rpush_3_0_1_updates'
require 'generators/templates/rpush_3_1_0_add_pushy'
require 'generators/templates/rpush_3_1_1_updates'

migrations = [
  AddRpush,
  Rpush200Updates,
  Rpush210Updates,
  Rpush260Updates,
  Rpush270Updates,
  Rpush300Updates,
  Rpush301Updates,
  Rpush310AddPushy,
  Rpush311Updates
]

unless ENV['TRAVIS']
  migrations.reverse_each do |m|
    begin
      m.down
    rescue ActiveRecord::StatementInvalid => e
      p e
    end
  end
end

migrations.each(&:up)

Rpush::Client::ActiveRecord::Notification.reset_column_information
Rpush::Client::ActiveRecord::App.reset_column_information
Rpush::Client::ActiveRecord::Apns::Feedback.reset_column_information
