namespace BotPages.Core
{
///
/// Билдер для удобного создания .
/// Мутабельный, но итоговый объект иммутабелен.
///
public sealed class PageResultBuilder
{
private PageNavigate? _navigateTo;
private PageMessage? _message;
private List? _files;
private List? _actions;
///
/// Устанавливает текст сообщения.
///
public PageResultBuilder WithText(string text, MessageFormat format)
=> WithText(new PageMessage()
{
Text = text,
Format = format,
});
///
/// Устанавливает текст сообщения.
///
public PageResultBuilder WithText(string text)
=> WithText(new PageMessage()
{
Text = text,
Format = MessageFormat.Plain,
});
///
/// Устанавливает текст сообщения.
///
public PageResultBuilder WithText(PageMessage message)
{
_message = message;
return this;
}
///
/// Добавляет клавиатуру (набор кнопок).
///
public PageResultBuilder WithKeyboard(IEnumerable actions)
{
_actions = actions?.ToList();
return this;
}
///
/// Добавляет файлы.
///
public PageResultBuilder WithFiles(IEnumerable files)
{
_files = files?.ToList();
return this;
}
///
/// Устанавливает навигацию на другую страницу.
///
public PageResultBuilder WithNavigate(string pageId, object? args = null, bool replace = true)
=> WithNavigate(new PageNavigate()
{
PageId = pageId,
Args = args,
Replace = replace,
});
///
/// Устанавливает навигацию на другую страницу.
///
public PageResultBuilder WithNavigate(PageNavigate navigate)
{
_navigateTo = navigate;
return this;
}
///
/// Собирает итоговый иммутабельный .
///
public PageResult Build() => new PageResult
{
Message = _message,
Actions = _actions,
Files = _files,
NavigateTo = _navigateTo,
};
///
/// Создаёт новый пустой билдер.
///
public static PageResultBuilder Empty() => new PageResultBuilder();
}
}