require "active_record"

# for debugging
ActiveRecord::Base.logger = $logger

# rails does this in activerecord/lib/active_record/railtie.rb
ActiveRecord::Base.default_timezone = :utc
ActiveRecord::Base.time_zone_aware_attributes = true

# migrations
ActiveRecord::Base.establish_connection adapter: "sqlite3", database: ":memory:"

ActiveRecord::Base.raise_in_transactional_callbacks = true if ActiveRecord::VERSION::STRING.start_with?("4.2.")

if defined?(Apartment)
  class Rails
    def self.env
      ENV["RACK_ENV"]
    end
  end

  tenants = ["tenant1", "tenant2"]
  Apartment.configure do |config|
    config.tenant_names = tenants
    config.database_schema_file = false
    config.excluded_models = ["Product", "Store", "Animal", "Dog", "Cat"]
  end

  class Tenant < ActiveRecord::Base
    searchkick index_prefix: -> { Apartment::Tenant.current }
  end

  tenants.each do |tenant|
    begin
      Apartment::Tenant.create(tenant)
    rescue Apartment::TenantExists
      # do nothing
    end
    Apartment::Tenant.switch!(tenant)

    ActiveRecord::Migration.create_table :tenants, force: true do |t|
      t.string :name
      t.timestamps null: true
    end

    Tenant.reindex
  end

  Apartment::Tenant.reset
end

ActiveRecord::Migration.create_table :products do |t|
  t.string :name
  t.integer :store_id
  t.boolean :in_stock
  t.boolean :backordered
  t.integer :orders_count
  t.decimal :found_rate
  t.integer :price
  t.string :color
  t.decimal :latitude, precision: 10, scale: 7
  t.decimal :longitude, precision: 10, scale: 7
  t.text :description
  t.text :alt_description
  t.timestamps null: true
end

ActiveRecord::Migration.create_table :stores do |t|
  t.string :name
end

ActiveRecord::Migration.create_table :regions do |t|
  t.string :name
  t.text :text
end

ActiveRecord::Migration.create_table :speakers do |t|
  t.string :name
end

ActiveRecord::Migration.create_table :animals do |t|
  t.string :name
  t.string :type
end

ActiveRecord::Migration.create_table :skus, id: :uuid do |t|
  t.string :name
end

ActiveRecord::Migration.create_table :songs do |t|
  t.string :name
end

class Product < ActiveRecord::Base
  belongs_to :store
end

class ProductWithDeleted < Product
end

class Store < ActiveRecord::Base
  has_many :products
end

class Region < ActiveRecord::Base
end

class Speaker < ActiveRecord::Base
end

class Animal < ActiveRecord::Base
end

class Dog < Animal
end

class Cat < Animal
end

class Sku < ActiveRecord::Base
end

class Song < ActiveRecord::Base
end
