namespace ZB.MOM.WW.ScadaBridge.SiteEventLogging;

public class SiteEventLogOptions
{
    /// <summary>Number of days to retain site event log entries before purge; default 30.</summary>
    public int RetentionDays { get; set; } = 30;
    /// <summary>Maximum SQLite database size in megabytes before old entries are purged; default 1024 MB.</summary>
    public int MaxStorageMb { get; set; } = 1024;
    /// <summary>
    /// MIGRATION-ONLY as of LocalDb Phase 1. <see cref="SiteEventLogger"/> no longer reads
    /// this: <c>site_events</c> lives in the consolidated site database at
    /// <c>LocalDb:Path</c>. The only remaining consumer is
    /// <c>SiteLocalDbLegacyMigrator</c>, which uses it to locate a pre-Phase-1
    /// <c>site_events.db</c> and copy it in once. Safe to delete from a config once that
    /// node's migration has run.
    /// </summary>
    public string DatabasePath { get; set; } = "site_events.db";
    /// <summary>Maximum number of rows returned per paginated query; default 500.</summary>
    public int QueryPageSize { get; set; } = 500;
    /// <summary>
    /// Hard upper bound on a caller-supplied <c>PageSize</c>. A
    /// misbehaving or hostile central client that requests <c>int.MaxValue</c> would
    /// otherwise force the query to materialise the entire log into a single list while
    /// holding the shared write lock. Silent clamp; default 500 matches
    /// <see cref="QueryPageSize"/>.
    /// </summary>
    public int MaxQueryPageSize { get; set; } = 500;
    /// <summary>Interval between purge runs; default 24 hours.</summary>
    public TimeSpan PurgeInterval { get; set; } = TimeSpan.FromHours(24);
    /// <summary>
    /// Bound on the background write queue. Default 10 000 events.
    /// Overflow uses <c>BoundedChannelFullMode.DropOldest</c> — callers never block; the
    /// dropped event's <c>Task</c> is faulted and <c>FailedWriteCount</c> is incremented
    /// so the drop is observable.
    /// </summary>
    public int WriteQueueCapacity { get; set; } = 10_000;
}
