using PnvPanel.Domain.Support;
namespace PnvPanel.Application.Common.Interfaces;
///
/// Проактивные DM-уведомления через бота. Реализация — в Api (нужен ITelegramBotClient,
/// который там же и регистрируется), аналогично IRealtimeNotifier/PanelHub. Если BotToken не
/// задан — реализация тихо не отправляет ничего (бот работает без Telegram).
///
public interface ITelegramNotifier
{
Task NotifyAdminsActivationRequestedAsync(
Guid requestId,
string userName,
string? comment,
CancellationToken cancellationToken
);
/// Личное сообщение пользователю, если у него привязан Telegram (иначе no-op).
/// Если задан PublicSiteUrl — добавляет кнопку-ссылку на сайт; linkPath — относительный путь
/// (например "/support?ticket={id}"), на который она ведёт, null — на корень сайта.
Task NotifyUserAsync(Guid userId, string message, string? linkPath, CancellationToken cancellationToken);
/// Баг-репорт/предложение — только кнопка-ссылка на сайт (переписка и картинки — там),
/// без инлайн-действий.
Task NotifyAdminsBugReportCreatedAsync(
Guid ticketId,
string userName,
string message,
CancellationToken cancellationToken
);
/// Заявка на роль — инлайн-кнопки «Одобрить/Отклонить», решается полностью в Telegram.
Task NotifyAdminsRoleRequestCreatedAsync(
Guid ticketId,
string userName,
string roleDescription,
string justification,
CancellationToken cancellationToken
);
/// Рассылка о публикации новости всем активированным пользователям с привязанным Telegram
/// (кнопка-ссылка на сайт, где новость показана целиком).
Task NotifyUsersNewsPublishedAsync(string title, CancellationToken cancellationToken);
/// Пользователь переоткрыл решённый тикет — только кнопка-ссылка на сайт, без
/// инлайн-действий (аналогично баг-репортам).
Task NotifyAdminsTicketReopenedAsync(
Guid ticketId,
string userName,
TicketType type,
CancellationToken cancellationToken
);
}