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

NS_ASSUME_NONNULL_BEGIN

@class CNContact;
@class Contact;
@class ModelReadCacheSizeLease;
@class NSPersonNameComponents;
@class PhoneNumber;
@class SDSAnyReadTransaction;
@class SignalAccount;
@class SignalServiceAddress;
@class TSThread;
@class UIImage;

@protocol ContactsManagerProtocol <NSObject>

/// 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"
- (NSString *)displayNameStringForAddress:(SignalServiceAddress *)address
                              transaction:(SDSAnyReadTransaction *)transaction;

/// 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
- (NSString *)shortDisplayNameStringForAddress:(SignalServiceAddress *)address
                                   transaction:(SDSAnyReadTransaction *)transaction;

@end

NS_ASSUME_NONNULL_END
