namespace ZB.MOM.WW.ScadaBridge.SiteRuntime;

/// <summary>
/// Configuration options for the Site Runtime component.
/// Bound from ScadaBridge:SiteRuntime configuration section.
/// </summary>
public class SiteRuntimeOptions
{
    /// <summary>
    /// Number of Instance Actors to create per batch during staggered startup.
    /// Default: 20.
    /// </summary>
    public int StartupBatchSize { get; set; } = 20;

    /// <summary>
    /// Delay in milliseconds between startup batches to prevent reconnection storms.
    /// Default: 100ms.
    /// </summary>
    public int StartupBatchDelayMs { get; set; } = 100;

    /// <summary>
    /// Maximum call depth for recursive script calls (CallScript/CallShared).
    /// Default: 10.
    /// </summary>
    public int MaxScriptCallDepth { get; set; } = 10;

    /// <summary>
    /// Default script execution timeout in seconds.
    /// Default: 30 seconds.
    /// </summary>
    public int ScriptExecutionTimeoutSeconds { get; set; } = 30;

    /// <summary>
    /// Per-subscriber buffer size for the site-wide Akka stream.
    /// Slow subscribers drop oldest messages when buffer is full.
    /// Default: 1000.
    /// </summary>
    public int StreamBufferSize { get; set; } = 1000;

    /// <summary>
    /// SiteRuntime-009: number of dedicated threads in the script-execution scheduler.
    /// Script and alarm on-trigger bodies run on these threads instead of the shared
    /// .NET thread pool, so blocking script I/O cannot starve the global pool.
    /// Default: 8.
    /// </summary>
    public int ScriptExecutionThreadCount { get; set; } = 8;

    /// <summary>
    /// Max mirrored native alarms retained per source binding before older entries are dropped (logged).
    /// Default: 1000.
    /// </summary>
    public int MirroredAlarmCapPerSource { get; set; } = 1000;

    /// <summary>
    /// Interval in milliseconds to retry a failed native alarm subscription.
    /// Default: 5000ms.
    /// </summary>
    public int NativeAlarmRetryIntervalMs { get; set; } = 5000;
}
