/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* This Source Code Form is subject to the terms of the Mozilla Public
 * License, v. 2.0. If a copy of the MPL was not distributed with this
 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
 
#include "nsIAbCard.idl"

interface nsIAbLDAPAttributeMap;
interface nsILDAPModification;
interface nsILDAPMessage;
interface nsIArray;

[scriptable, uuid(2831b3b0-30ef-4070-8ad3-90ae04980e11)]
interface nsIAbLDAPCard : nsISupports
{
  /**
   * Returns the required information for an LDAP update message.
   *
   * @param  aAttrMap    The map between LDAP attributes and card properties
   * @param  aClassCount The number of objectClass values
   * @param  aClasses    The objectClass values that the card needs to have
   * @param  updateType  This should be one of:
   *                         nsILDAPModification::MOD_ADD
   *                         nsILDAPModification::MOD_REPLACE
   *
   * @return             Returns an array of modifications required to
   *                     add or replace the card in the ldap directory.
   */
  nsIArray getLDAPMessageInfo(in nsIAbLDAPAttributeMap aAttrMap,
                              in unsigned long aClassCount,
                              [array, size_is(aClassCount)] in string aClasses,
                              in long updateType);

  /**
   * Builds a relative distinguished name (RDN) with the given set of
   * attributes.
   *
   * @param  aAttrMap    The map between LDAP attributes and card properties
   * @param  aAttrCount  The number of attributes to use for the RDN
   * @param  aAttributes The name of the attributes to use for the RDN
   *
   */
  ACString buildRdn(in nsIAbLDAPAttributeMap aAttrMap,
                    in unsigned long aAttrCount,
                    [array, size_is(aAttrCount)] in string aAttributes);
  
  /**
   * Stores meta-properties from a raw LDAP search result.
   *
   * @param aMessage     The LDAP search result message.
   *
   */
  void setMetaProperties(in nsILDAPMessage aMessage);

  attribute ACString dn;
};
