namespace OTSSignsOrchestrator.Core.Configuration; public class FileLoggingOptions { public const string SectionName = "FileLogging"; public bool Enabled { get; set; } = true; public string Path { get; set; } = "logs"; public string RollingInterval { get; set; } = "Day"; public int RetentionDays { get; set; } = 30; public long FileSizeLimitBytes { get; set; } = 100 * 1024 * 1024; // 100MB } public class GitOptions { public const string SectionName = "Git"; public string CacheDir { get; set; } = ".template-cache"; public int CacheTtlMinutes { get; set; } = 60; public int ShallowCloneDepth { get; set; } = 1; } public class DockerOptions { public const string SectionName = "Docker"; public List DefaultConstraints { get; set; } = new() { "node.labels.xibo==true" }; public int DeployTimeoutSeconds { get; set; } = 30; public bool ValidateBeforeDeploy { get; set; } = true; } public class XiboDefaultImages { public string Cms { get; set; } = "ghcr.io/xibosignage/xibo-cms:release-4.4.0"; public string Mysql { get; set; } = "mysql:8.4"; public string Memcached { get; set; } = "memcached:alpine"; public string QuickChart { get; set; } = "ianw/quickchart"; } public class XiboOptions { public const string SectionName = "Xibo"; public XiboDefaultImages DefaultImages { get; set; } = new(); public int TestConnectionTimeoutSeconds { get; set; } = 10; } public class DatabaseOptions { public const string SectionName = "Database"; public string Provider { get; set; } = "Sqlite"; } public class InstanceDefaultsOptions { public const string SectionName = "InstanceDefaults"; /// Default template repo URL if not overridden per-instance. public string? TemplateRepoUrl { get; set; } public string? TemplateRepoPat { get; set; } /// Template for CMS server hostname. Use {abbrev} as placeholder. public string CmsServerNameTemplate { get; set; } = "{abbrev}.ots-signs.com"; public string SmtpServer { get; set; } = string.Empty; public string SmtpUsername { get; set; } = string.Empty; public string SmtpPassword { get; set; } = string.Empty; public int BaseHostHttpPort { get; set; } = 8080; /// Template for theme path. Use {abbrev} as placeholder. /// Static host path for the theme volume mount. Overridable per-instance. public string ThemeHostPath { get; set; } = "/cms/ots-theme"; /// Subfolder name on CIFS share for the library volume. Use {abbrev} as placeholder. public string LibraryShareSubPath { get; set; } = "{abbrev}-cms-library"; public string MySqlDatabaseTemplate { get; set; } = "{abbrev}_cms_db"; public string MySqlUserTemplate { get; set; } = "{abbrev}_cms_user"; }