namespace :dm_core do

desc "Create a new site/account"
task create_site: :environment do
  puts "\n"
  puts "---------------------------------------------------------------------------------"
  puts " Creates a new account/site and an associated admin account"
  puts "---------------------------------------------------------------------------------"
  puts "\n"
  puts "----- Enter Details of Account/Site to Create -----"
  puts "Company Name: "
  company_name = STDIN.gets.chomp
  puts "\nContact Email: "
  contact_email = STDIN.gets.chomp
  puts "\nDomain Name: (use 'localhost' for initial development setup)"
  domain_name = STDIN.gets.chomp
  puts "\nAccount Prefix (use 'local' for initial development setup):"
  account_prefix = STDIN.gets.chomp

  separated     = domain_name.downcase.split('.')
  short_domain  = (separated.first == 'www') ? (separated.last(separated.size - 1).join('.')) : domain_name

  current_account = Account.new(company_name: company_name, contact_email: contact_email, domain: domain_name, account_prefix: account_prefix)
  current_account.save!(validate: false)
  Account.current = current_account
  Account.current_by_prefix(account_prefix)

  puts "\n"
  puts "----- Associate an Admin User -----"
  puts "Admin User Email (will be created if it doesn't exist): "
  user_email = STDIN.gets.chomp
  if !(user = User.find_by_email(user_email))
    begin
      puts "\nFirst Name (required): "
      first_name = STDIN.gets.chomp
    end while first_name.blank?
    begin
      puts "\nLast Name (required): "
      last_name = STDIN.gets.chomp
    end while last_name.blank?
    begin
      puts "\nPassword (min 8 chars): "
      password = STDIN.gets.chomp
    end while password.length < 8
    user = User.new({ email: user_email, password: password, password_confirmation: password,
                      user_profile: UserProfile.new(first_name: first_name, last_name: last_name, public_name: 'admin')
                   })
    user.skip_confirmation!
    user.save!
    puts "\n--- User '#{user_email}' created"
  end
  user.add_role :admin
  #--- add as sysadmin if this is the only user
  sysadmin = Role.unscoped.where(name: 'sysadmin').first
  user.roles << sysadmin if User.all.count == 1
  user.save!
  puts "\n--- Finished"
end

end