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