using BotPages.Core.Context;
using BotPages.Core.Messaging;
namespace BotPages.Core.Abstractions;
///
/// Базовый класс для адаптеров мессенджеров.
///
public abstract class MessengerAdapterBase : IMessengerAdapterSetup
{
///
/// Уникальный идентификатор адаптера.
///
public string AdapterId { get; internal set; } = string.Empty;
///
/// Тип адаптера (Telegram, VK, WhatsApp и т.д.).
///
public abstract string AdapterType { get; }
///
/// Название адаптера для отображения.
///
public string DisplayName { get; set; } = string.Empty;
///
/// Доступные возможности мессенджера.
///
public abstract Capabilities Capabilities { get; }
///
/// Универсальный метод отправки с использованием общего описания запроса.
///
public abstract Task SendAsync(SendRequest request, CancellationToken ct = default);
///
/// Универсальный метод удаления сообщения.
///
public abstract Task DeleteAsync(string chatId, string messageId, CancellationToken ct = default);
///
/// Удалить несколько сообщений за раз.
///
public abstract Task DeleteMultipleAsync(string chatId, IEnumerable messageIds, CancellationToken ct = default);
///
/// Редактировать только текст сообщения.
///
public abstract Task EditTextAsync(string chatId, string messageId, string text,
MessageFormat? format = null, CancellationToken ct = default);
///
/// Редактировать только клавиатуру сообщения.
///
public abstract Task EditButtonsAsync(string chatId, string messageId,
IEnumerable>? inlineButtons = null,
CancellationToken ct = default);
///
/// Закрепить сообщение в чате.
///
public abstract Task PinMessageAsync(string chatId, string messageId, bool disableNotification = false,
CancellationToken ct = default);
///
/// Открепить сообщение в чате.
///
public abstract Task UnpinMessageAsync(string chatId, string messageId, CancellationToken ct = default);
///
/// Получить информацию о сообщении.
///
public abstract Task GetMessageInfoAsync(string chatId, string messageId, CancellationToken ct = default);
///
/// Переслать сообщение.
///
public abstract Task ForwardMessageAsync(string fromChatId, string messageId, string toChatId,
bool disableNotification = false, CancellationToken ct = default);
///
/// Копировать сообщение с возможностью редактирования.
///
public abstract Task CopyMessageAsync(string fromChatId, string messageId, string toChatId,
string? caption = null, MessageFormat? captionFormat = null,
bool disableNotification = false, CancellationToken ct = default);
///
/// Создать билдер альбома для отправки медиагруппы.
///
public abstract IAlbumBuilder CreateAlbumBuilder(PageContext ctx);
///
/// Вызывается при выходе со страницы.
///
public abstract Task OnLeaveAsync(PageContext ctx, CancellationToken ct);
///
/// Запуск работы адаптера.
///
public abstract Task StartAdapterAsync(Func onUpdate, List commands, CancellationToken ct);
}