namespace ZB.MOM.WW.MxGateway.Server.Configuration;
///
/// Configuration for the gateway's always-on central alarm monitor
/// (). When
/// is true the gateway opens one gateway-owned worker session dedicated to
/// alarms, caches the active-alarm set, and fans it out to every client
/// through the StreamAlarms RPC — no client opens its own session
/// to see alarms.
///
///
/// Defaults preserve current behaviour (alarm monitoring disabled).
/// Operators opt in by setting MxGateway:Alarms:Enabled = true and
/// supplying a canonical \\<machine>\Galaxy!<area>
/// subscription expression. The literal "Galaxy" provider is correct
/// regardless of the configured Galaxy database name (the wnwrap consumer
/// does not accept the database name as the provider).
///
public sealed class AlarmsOptions
{
/// Gate the gateway's always-on central alarm monitor. Default false.
public bool Enabled { get; init; }
///
/// AVEVA alarm-subscription expression the monitor subscribes on
/// startup. When empty and is true, the gateway
/// falls back to \\$(MachineName)\Galaxy!$(DefaultArea) if
/// is set; otherwise the monitor faults with
/// a configuration diagnostic.
///
public string SubscriptionExpression { get; init; } = string.Empty;
///
/// Optional area name used to compose a default subscription when
/// is empty. Combined with
/// Environment.MachineName as
/// \\<MachineName>\Galaxy!<DefaultArea>.
///
public string DefaultArea { get; init; } = string.Empty;
///
/// How often the monitor reconciles its in-process alarm cache against
/// the worker's authoritative active-alarm snapshot, catching any
/// transitions the live poll-and-diff feed missed. Default 30 seconds;
/// the monitor floors it at 5 seconds.
///
public int ReconcileIntervalSeconds { get; init; } = 30;
///
/// Configuration for the alarm-manager ↔ subtag fallback mechanism:
/// operating mode, failure-detection thresholds, discovery, and subtag
/// names. Defaults (Mode = "Auto") preserve behaviour when the section is
/// omitted from configuration.
///
public AlarmFallbackOptions Fallback { get; init; } = new();
}