///////////////////////////////////////////////////////////////////////////////
// Copyright (C) 2002-2026, Open Design Alliance (the "Alliance").
// All rights reserved.
//
// This software and its documentation and related materials are owned by
// the Alliance. The software may only be incorporated into application
// programs owned by members of the Alliance, subject to a signed
// Membership Agreement and Supplemental Software License Agreement with the
// Alliance. The structure and organization of this software are the valuable
// trade secrets of the Alliance and its suppliers. The software is also
// protected by copyright law and international treaty provisions. Application
// programs incorporating this software must include the following statement
// with their copyright notices:
//
//   This application incorporates Open Design Alliance software pursuant to a
//   license agreement with Open Design Alliance.
//   Open Design Alliance Copyright (C) 2002-2026 by Open Design Alliance.
//   All rights reserved.
//
// By use of this software, its documentation or related materials, you
// acknowledge and accept the above terms.
///////////////////////////////////////////////////////////////////////////////

/**
 * Defines brief user information.
 */
export interface IShortUserDesc {
  /**
   * Unique user ID.
   */
  userId: string;

  /**
   * User name.
   */
  userName: string;

  /**
   * First name.
   */
  name: string;

  /**
   * Last name.
   */
  lastName: string;

  /**
   * User email.
   */
  email: string;

  /**
   * User avatar image URL or empty string if the user does not have an avatar.
   *
   * This URL does not change when the underlying image content is updated. Because of this, browsers may
   * cache the image, which can prevent the avatar from updating visually in web applications (such as
   * React, Angular, etc.).
   *
   * To avoid caching issues, append a dynamic query parameter to the URL, such as the users's
   * {@link lastModified | last modification date}. Since this date changes whenever the avatar is
   * updated, the browser will correctly reload the new image when required.
   *
   * @example Usage in a React component
   *
   * ```js
   * function UserAvatar({ user }) {
   *   // 'lastModified' is a timestamp representing when the user was last modified.
   *   const cacheBuster = user.lastModified;
   *
   *   // Use a default image if the user does not have an avatar
   *   const imageSrc = user.avatarUrl
   *     ? `${user.avatarUrl}?t=${cacheBuster}`
   *     : "/assets/default-avatar.png";
   *
   *   return <img src={imageSrc} alt="User avatar" />;
   * }
   * ```
   */
  avatarUrl: string;

  /**
   * User last update time (UTC) in the format specified in
   * {@link https://www.wikipedia.org/wiki/ISO_8601 | ISO 8601}.
   */
  lastModified: string;

  /**
   * User full name. Contains the user's first and last name. If first name and last names are empty,
   * contains the user name.
   */
  fullName: string;

  /**
   * User initials. Contains a first letters of the user's first and last names. If first name and last
   * names are empty, contains the first letter of the user name.
   */
  initials: string;
}
