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