using MBN_STOCK_WEBVIEW.Core.Playout; using MBN_STOCK_WEBVIEW.Core.Playout.Scenes; namespace MBN_STOCK_WEBVIEW.Playout.Configuration; public sealed class PlayoutOptions { /// /// Process-local provenance set only by the exact Debug Development Live /// bootstrap loader. It is not a JSON or environment configuration surface. /// internal bool DevelopmentLiveBootstrapApplied { get; set; } /// /// Canonical executable-relative Cuts root captured by the Development Live /// loader. Final validation uses it to prevent later replacement of the /// verified build payload. /// internal string? DevelopmentLiveExecutableSceneDirectory { get; set; } public PlayoutMode Mode { get; set; } = PlayoutMode.DryRun; public string Host { get; set; } = "127.0.0.1"; public int Port { get; set; } = 30001; /// KTAPConnect bTCP argument. The legacy application uses 1. public int TcpMode { get; set; } = 1; /// KTAPConnect nClientPort argument. Zero lets the SDK choose. public int ClientPort { get; set; } public int? OutputChannel { get; set; } public int LayoutIndex { get; set; } = 10; /// MainForm ComboDi.SelectedIndex (0..19) passed to SetSceneEffectType. public int LegacySceneFadeDuration { get; set; } = 6; /// /// Trusted MainForm-level background selection. The asset is always a path relative /// to LegacyBackgroundDirectory and is never accepted from Web content. /// public LegacySceneBackgroundKind LegacySceneBackgroundKind { get; set; } = LegacySceneBackgroundKind.None; public string? LegacySceneBackgroundAssetPath { get; set; } public int LegacySceneBackgroundVideoLoopCount { get; set; } = 2004; public bool LegacySceneBackgroundVideoLoopInfinite { get; set; } = true; /// /// External absolute root containing operator-selectable MainForm backgrounds. /// When omitted, the original layout is retained by deriving a sibling "배경" /// directory from SceneDirectory (Cuts\..\배경). This root is never merged with /// the trusted scene/Cuts root. /// public string? LegacyBackgroundDirectory { get; set; } /// /// External absolute root containing vendor .t2s scenes. Required in Test and Live modes. /// public string? SceneDirectory { get; set; } public string? TestProcessWindowTitlePattern { get; set; } /// /// Closed scene-name allowlist for every real Test or Live output command. /// The property name is retained for existing local configuration files. /// public List TestSceneAllowlist { get; set; } = []; public bool TrustedLiveOutputEnabled { get; set; } public int QueueCapacity { get; set; } = 64; public int ConnectTimeoutMilliseconds { get; set; } = 5_000; public int OperationTimeoutMilliseconds { get; set; } = 5_000; public int DisconnectTimeoutMilliseconds { get; set; } = 3_000; public int ProcessPollIntervalMilliseconds { get; set; } = 1_000; public int ReconnectDelayMilliseconds { get; set; } = 1_000; public int MaximumReconnectAttempts { get; set; } = 3; public bool ReconnectEnabled { get; set; } = true; /// /// Optional trusted local safety ceiling for timer-driven same-scene refreshes /// started by one TAKE IN. Null preserves the legacy continuous-refresh behavior; /// zero disables automatic refresh; a positive value stops after that many /// successful refresh dispatches and drains the final play callback before /// reporting that the limit was reached. Web content cannot change this value. /// public int? MaximumAutomaticRefreshesPerTakeIn { get; set; } }