namespace :ldap do
  desc "Reset the LDAP directory and set up base entries and default org"
  task setup: :environment do |t, args|
    ldap = LdapService.new

    ldap.delete_entry "cn=admin_role,ou=kosmos.org,cn=users,dc=kosmos,dc=org", true

    # Delete all existing entries and re-add base entries
    ldap.reset_directory!

    ldap.add_organization "kosmos.org", "Kosmos", true

    # add admin role
    ldap.add_entry "cn=admin_role,ou=kosmos.org,cn=users,dc=kosmos,dc=org", {
      objectClass: %w{top LDAPsubentry nsRoleDefinition nsComplexRoleDefinition nsFilteredRoleDefinition},
      cn: "admin_role",
      nsRoleFilter: "(&(objectclass=person)(admin=true))",
      description: "filtered role for admins"
    }, true
  end

  desc "List user domains/organizations"
  task list_organizations: :environment do |t, args|
    ldap = LdapService.new
    orgs = ldap.fetch_organizations
    puts orgs.inspect
  end
end
