# This file should contain all the record creation needed to seed the database with its default values.
# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup).
#
# Examples:
#
#   cities = City.create([{ name: 'Chicago' }, { name: 'Copenhagen' }])
#   Mayor.create(name: 'Emanuel', city: cities.first)
require 'active_record/fixtures'

#Load defaults from db/seed/fixtures
Dir.glob(File.join(Rails.root, 'db', 'seed', 'fixtures', '**', '*.{yml,csv}')).each do |fixture_file, something|
  ActiveRecord::Fixtures.create_fixtures(File.dirname(fixture_file), File.basename(fixture_file, '.*'))
end

#Load bike brands and models from sql
if BikeBrand.all.empty? and BikeModel.all.empty?
  # Need to use DEFAULT instead of explicit IDs that are used in the sql file,
  # so that the PG table ID sequence is incremented
  #
  # Note the drop(1) which assumes we have a junk PRAGMA line at the top
  load_statements = File.readlines(File.join(Rails.root, 'db', 'seed', 'sql', 'bike_brands_and_models.sql')).drop(1).map do |statement|
    statement.sub(/VALUES\(\d+,/, 'VALUES(DEFAULT,')
  end
  ActiveRecord::Base.connection.execute(load_statements.join)
end

if Rails.env.development?

  #create default users
  if User.all.empty?
    u = FactoryGirl.create(:user)
    FactoryGirl.create(:user_profile, user_id: u.id)
    u = FactoryGirl.create(:staff)
    FactoryGirl.create(:user_profile, user_id: u.id)
    u = FactoryGirl.create(:bike_admin)
    FactoryGirl.create(:user_profile, user_id: u.id)
    u = FactoryGirl.create(:admin)
    FactoryGirl.create(:user_profile, user_id: u.id)
  end

  #create fake bikes
  if Bike.all.empty?
    42.times do |n|
      FactoryGirl.create(:seed_bike)
    end
  end
elsif Rails.env.production?

  unless User.find_by_username('admin')
    #create an admin
    admin = User.create!( :username => 'admin',
                  :first_name => 'admin',
                  :last_name => 'admin',
                  :email=>'admin@example.com',
                  :password=>'password')
    admin.roles << Role.find_by_role('admin')
  end

end