using Ikar.Server.Data.Entities;
using Ikar.Shared;

namespace Ikar.Server.Infrastructure.Push;

public interface IPushNotificationSender
{
    Task SendMessageAsync(
        Chat chat,
        Message message,
        IReadOnlyCollection<PushDevice> devices,
        CancellationToken cancellationToken = default);

    Task SendMessageReactionAsync(
        Chat chat,
        Message message,
        User reactor,
        string emoji,
        IReadOnlyCollection<PushDevice> devices,
        CancellationToken cancellationToken = default);

    Task SendIncomingCallAsync(
        IncomingCallDto call,
        IReadOnlyCollection<PushDevice> devices,
        CancellationToken cancellationToken = default);

    Task SendCallEndedAsync(
        CallEndedDto call,
        IReadOnlyCollection<PushDevice> devices,
        CancellationToken cancellationToken = default);

    Task SendAppUpdateAvailableAsync(
        AndroidAppReleaseDto release,
        IReadOnlyCollection<PushDevice> devices,
        CancellationToken cancellationToken = default);
}
