using Akka.Actor;
using ZB.MOM.WW.ScadaBridge.Commons.Messages.Health;
using ZB.MOM.WW.ScadaBridge.HealthMonitoring;
using ZB.MOM.WW.ScadaBridge.Host.Actors;

namespace ZB.MOM.WW.ScadaBridge.Host;

/// <summary>
/// Sends SiteHealthReport to the local SiteCommunicationActor via Akka ActorSelection.
/// The SiteCommunicationActor forwards it to central.
/// </summary>
public class AkkaHealthReportTransport : IHealthReportTransport
{
    private readonly AkkaHostedService _akkaService;

    /// <summary>
    /// Initializes a new <see cref="AkkaHealthReportTransport"/> backed by the given Akka hosted service.
    /// </summary>
    /// <param name="akkaService">The Akka hosted service used to access the running actor system.</param>
    public AkkaHealthReportTransport(AkkaHostedService akkaService)
    {
        _akkaService = akkaService;
    }

    /// <inheritdoc />
    public void Send(SiteHealthReport report)
    {
        var actorSystem = _akkaService.ActorSystem;
        if (actorSystem == null) return;

        var siteComm = actorSystem.ActorSelection("/user/site-communication");
        siteComm.Tell(report, ActorRefs.NoSender);
    }
}
