using BotPages.Core.Abstractions;
using BotPages.Core.Context;
namespace BotPages.Core;
///
/// Контекст страницы, объединяющий пользователя, чат, состояние и адаптер.
///
public sealed class PageContext
{
/// Ключ сессии.
public required CompositeSessionKey SessionKey { get; init; }
/// Данные обновления.
public required UpdateContext Update { get; init; }
/// Хранилище состояния.
public required IStateStorage StateStorage { get; init; }
/// Сервис навигации.
public required NavigationService Navigation { get; init; }
/// Фабрика адаптеров (для получения других адаптеров).
public required IMessengerAdapterFactory AdapterFactory { get; init; }
/// Текущий адаптер мессенджера.
public required IMessengerAdapter Adapter { get; init; }
///
/// Получить билдер альбомов.
///
public IAlbumBuilder Albums => Adapter.CreateAlbumBuilder(this);
///
/// Получить адаптер по ID.
///
public IMessengerAdapter GetAdapter(string adapterId)
=> AdapterFactory.Resolve(adapterId);
///
/// Попытаться получить адаптер по ID.
///
public bool TryGetAdapter(string adapterId, out IMessengerAdapter? adapter)
=> AdapterFactory.TryResolve(adapterId, out adapter);
///
/// Получить все адаптеры определенного типа.
///
public IReadOnlyList GetAdaptersByType(string adapterType)
=> AdapterFactory.GetAdaptersByType(adapterType);
///
/// Получить текущий тип адаптера.
///
public string CurrentAdapterType => Update.Adapter.Type;
///
/// Получить текущий ID адаптера.
///
public string CurrentAdapterId => Update.Adapter.Id;
///
/// Получить все адаптеры.
///
public IReadOnlyList AllAdapters => AdapterFactory.AllAdapters;
}