namespace Deal.Telegram.Telegram;
///
/// Диалог (источник) аккаунта в нейтральном для TL-слоя виде (план Task 10; Ruling 3/7).
///
/// Это результат «списка диалогов» сессии (refresh_dialogs прототипа L505–519): id в подписанном
/// каноне контракта («-100…» каналы, «-…» группы, «+…» личные), отображаемое имя, username, тип
/// канона channel|group|forum|chat и счётчики для догонялки непрочитанных (realtime_sweep L427–456).
/// TL-реализация () и фейки тестов возвращают именно этот тип;
/// службы каталога не зависят от библиотеки WTelegramClient.
///
public sealed record TelegramDialog
{
///
/// Создаёт описание диалога.
///
/// Подписанный id диалога (каналы «-100…», группы «-…», личные «+…»).
/// Отображаемое имя (title/first_name) или id, если имени нет.
/// Username (handle); пуст, если публичного username нет.
/// Тип канона: channel|group|forum|chat (шапка telegram.proto).
/// Число непрочитанных сообщений (для realtime_sweep).
/// Id самого свежего сообщения диалога (для read-ack).
public TelegramDialog(string id, string name, string username, string kind, int unreadCount, int topMessageId)
{
Id = id;
Name = name;
Username = username;
Kind = kind;
UnreadCount = unreadCount;
TopMessageId = topMessageId;
}
///
/// Подписанный id диалога (каналы «-100…», группы «-…», личные «+…»).
///
public string Id { get; }
///
/// Отображаемое имя (title/first_name) или id, если имени нет.
///
public string Name { get; }
///
/// Username (handle); пуст, если публичного username нет.
///
public string Username { get; }
///
/// Тип канона контракта: channel|group|forum|chat.
///
public string Kind { get; }
///
/// Число непрочитанных сообщений диалога (для догона realtime_sweep).
///
public int UnreadCount { get; }
///
/// Id самого свежего сообщения диалога.
///
public int TopMessageId { get; }
}