using ZB.MOM.WW.Audit;
using ZB.MOM.WW.ScadaBridge.Commons.Interfaces.Services;

namespace ZB.MOM.WW.ScadaBridge.Host.Services;

/// <summary>
/// Central-only bridge from the shared-library audit seam
/// (<see cref="ZB.MOM.WW.Audit.IAuditWriter"/>) to the central direct-write path
/// (<see cref="ICentralAuditWriter"/> → dbo.AuditLog). Shared-lib UI components —
/// today the Secrets.Ui components mounted at /admin/secrets — inject the shared
/// seam, which is deliberately distinct from the repo's own
/// <see cref="Commons.Interfaces.Services.IAuditWriter"/> (ScadaBridge#22).
/// </summary>
/// <remarks>
/// The target is <see cref="ICentralAuditWriter"/> and NOT the repo's own site
/// writer chain: the site SQLite chain is registered on central but by design
/// never resolved there, and events written to it would dead-end in a local file
/// that no forwarding sidecar drains on a central node. The best-effort contract
/// (audit failures never abort the user-facing action) is inherited from
/// <see cref="AuditLog.Central.CentralAuditWriter"/>, which swallows and logs —
/// so this forward needs no try/catch of its own.
/// </remarks>
/// <param name="central">The central direct-write audit path to forward into.</param>
public sealed class CentralSharedSeamAuditWriter(ICentralAuditWriter central)
    : ZB.MOM.WW.Audit.IAuditWriter
{
    /// <inheritdoc />
    public Task WriteAsync(AuditEvent auditEvent, CancellationToken cancellationToken = default)
        => central.WriteAsync(auditEvent, cancellationToken);
}
