<?php
namespace nulib\ldap;

/**
 * Interface IObjectWorkflow: un objet permettant de créer et/ou mettre à jour
 * un objet LDAP dans le cadre d'une synchronisation
 */
interface IObjectWorkflow {
  /** retourner le nom du workflox */
  function getWorkflowName(): string;

  /**
   * synchroniser les données spécifiées vers l'objet correspndant, en le créant
   * si nécessaire.
   *
   * $updated=true si l'objet a été créé ou mis à jour, false sinon
   */
  function createOrUpdate(array $data, ?array $params=null, ?bool &$updated=null): ?LdapObject;

  /**
   * modifier uniquement le mot de passe de l'objet correspondant
   *
   * @return bool true si l'objet correspondant a été trouvé et qu'il a été mis
   * à jour
   */
  function updatePassword(array $data, string $password): bool;

  /**
   * supprimer l'objet correspondant. retourner true si l'objet a été supprimé,
   * false s'il n'existait pas
   */
  function delete(array $data, ?array $params=null): bool;
}
