namespace ZB.MOM.WW.OtOpcUa.Commons.Messages.Deploy;
///
/// The deploy-path timing contract shared by central (ConfigPublishCoordinator) and the node
/// (DriverHostActor). One place, so the node's ack-hold timeout can never drift past the deadline
/// central times the deployment out on.
///
public static class DeployTimings
{
/// How long central waits for every expected node's ack before sealing the deployment TimedOut
/// (ConfigPublishCoordinator.DefaultApplyDeadline).
public static readonly TimeSpan ApplyDeadline = TimeSpan.FromMinutes(2);
/// Gitea #601 — how far inside a node's held Applied ack is released
/// when the address-space outcome has not arrived, leaving room for transport latency.
public static readonly TimeSpan ApplyOutcomeSafetyMargin = TimeSpan.FromSeconds(15);
/// Gitea #601 — the node's default apply-outcome timeout: −
/// (105 s). Long enough that a slow-but-clean rebuild of a large
/// address space is not labelled degraded, short enough to ack before central gives up.
/// The timer is armed after the artifact read and driver reconcile, so if those alone took
/// longer than the margin the ack can still land after the deadline — accepted: they are seconds in
/// practice, and lengthening the margin would label more slow-but-clean rebuilds degraded.
public static TimeSpan ApplyOutcomeTimeout => ApplyDeadline - ApplyOutcomeSafetyMargin;
}