namespace Meezi.Core.Interfaces;

/// <summary>
/// Sends push notifications through the Pushe gateway (Iran-safe; FCM is
/// unreliable inside Iran). Topics are subscribed client-side via the native
/// Pushe SDK; this service triggers the actual sends from the backend.
/// </summary>
public interface IPushSender
{
    /// <summary>
    /// Broadcasts to every device subscribed to a Pushe topic.
    /// Topics: <c>city-{slug}</c> (marketing / new cafés),
    /// <c>cafe-{slug}</c> (saved-café alerts).
    /// </summary>
    Task SendToTopicAsync(
        string topic,
        string title,
        string body,
        string? deepLink = null,
        CancellationToken cancellationToken = default);

    /// <summary>
    /// Sends to one or more specific device tokens — used for transactional
    /// order / reservation updates.
    /// </summary>
    Task SendToTokensAsync(
        IReadOnlyCollection<string> tokens,
        string title,
        string body,
        string? deepLink = null,
        CancellationToken cancellationToken = default);
}
