#!/usr/bin/env ruby
require File.expand_path('../../config/boot',  __FILE__)
require RAILS_ROOT + '/config/environment'

key = ARGV[0]
if key.nil?
  puts "Using default organisation configuration"
  key = "default"
end

unless organisation = Organisation.find(key)
  puts "Can't find organisation configuration."
  exit
end

I18n.locale = organisation.value_by_key('locale')

puts "Create a new owner of the organisation"
puts "Organisation: " + organisation.name.to_s

print "Bind DN: "
dn = STDIN.gets.chomp
print "Password: "
system('stty','-echo');
password = STDIN.gets.chomp
system('stty','echo');

default_ldap_configuration = ActiveLdap::Base.ensure_configuration
# Setting up ldap configuration
LdapBase.ldap_setup_connection( organisation.ldap_host,
                                organisation.ldap_base,
                                dn,
                                password )
# School
school = School.first
puts "\nCreate new school"
school_name = I18n.t('create_organisation_owner.school_name')
puts "School name: #{school_name}" 
school = School.create!( :displayName => school_name,
                         :cn => school_name.downcase.gsub(/[^a-z0-9]/, "") )

# Role
puts "Create new role"
role_name = I18n.t('create_organisation_owner.role_name')
puts "Role name: #{role_name}"
role = Role.create!( :displayName => role_name,
                    :puavoSchool => school.dn )

# Group
puts "Create new group"
group_name = I18n.t('create_organisation_owner.group_name')
puts "Group name: #{group_name}"
group = Group.create!( :displayName => group_name,
                      :cn => group_name.downcase.gsub(/[^a-z0-9]/, ""),
                      :puavoSchool => school.dn )

# User
puts "Create new user:"

print "Given name: "
given_name = STDIN.gets.chomp

print "Surname: "
surname = STDIN.gets.chomp
print "Username: "
username = STDIN.gets.chomp
system('stty','-echo');
print "Password: "
password = STDIN.gets.chomp
print "\nPassword confirmation: "
password_confirmation = STDIN.gets.chomp
system('stty','echo');

user = User.new

user.givenName = given_name
user.sn = surname
user.uid = username
user.new_password = password
user.new_password_confirmation = password_confirmation
user.gidNumber = group.id
user.role_name = role.displayName
user.puavoSchool = school.dn
user.eduPersonAffiliation = "staff"
user.save!

puts "\nSets the user (#{user.uid}) as the owner of the organisation"
ldap_organisation = LdapOrganisation.first
ldap_organisation.owner = Array(ldap_organisation.owner).push user.dn
ldap_organisation.save

