//
// Copyright 2024 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
//

import Foundation

@objc
public protocol ContactsManagerProtocol {

    /// The name representing this address.
    ///
    /// This will be the first of the following that exists for this address:
    /// - System contact name
    /// - Profile name
    /// - Username
    /// - Phone number
    /// - "Unknown"
    @objc(displayNameStringForAddress:transaction:)
    func displayNameString(for address: SignalServiceAddress, transaction: DBReadTransaction) -> String

    /// Returns the user's nickname / first name, if supported by the name's locale.
    /// If we don't know the user's name components, falls back to displayNameForAddress:
    ///
    /// The user can customize their short name preferences in the system settings app
    /// to any of these variants which we respect:
    ///     * Given Name - Family Initial
    ///     * Family Name - Given Initial
    ///     * Given Name Only
    ///     * Family Name Only
    ///     * Prefer Nicknames
    ///     * Full Names Only
    @objc(shortDisplayNameStringForAddress:transaction:)
    func shortDisplayNameString(for address: SignalServiceAddress, transaction: DBReadTransaction) -> String
}
