using ZB.MOM.WW.ScadaBridge.Commons.Messages.Health;

namespace ZB.MOM.WW.ScadaBridge.HealthMonitoring;

/// <summary>
/// Abstraction for sending health reports to central.
/// In production, implemented over the gRPC central transport with an acked round-trip
/// (review 01 [Medium]): the transport Asks and awaits a
/// <see cref="SiteHealthReportAck"/>, so a lost/rejected report surfaces as a
/// fault the sender can observe (and its per-interval counter-restore fires).
/// </summary>
public interface IHealthReportTransport
{
    /// <summary>
    /// Sends a health report to central and completes only once central has
    /// acknowledged processing. MUST THROW on non-delivery (Ask timeout, actor
    /// system not started, or a not-accepted ack) — the sender's counter-restore
    /// path in <c>HealthReportSender</c> depends on that exception.
    /// </summary>
    /// <param name="report">The site health report to send.</param>
    /// <param name="cancellationToken">Cancels the in-flight send.</param>
    /// <returns>A task that represents the asynchronous operation.</returns>
    Task SendAsync(SiteHealthReport report, CancellationToken cancellationToken);
}
