using Xunit;
using ZB.MOM.WW.OtOpcUa.Runtime.Historian;

namespace ZB.MOM.WW.OtOpcUa.Runtime.Tests.Historian;

/// <summary>
///     Verifies <see cref="ContinuousHistorizationOptions.Validate"/> self-gates on <c>Enabled</c> and
///     warns (warn-only, never blocks startup) on the two gated misconfigurations: a blank
///     <c>OutboxPath</c> while enabled, and a non-positive <c>CommitIntervalMs</c> under
///     <c>Periodic</c> commit mode. No warning text carries a secret value.
/// </summary>
public sealed class ContinuousHistorizationOptionsTests
{
    /// <summary>A disabled recorder yields no warnings regardless of the other knobs.</summary>
    [Fact]
    public void Disabled_no_warnings()
        => Assert.Empty(new ContinuousHistorizationOptions { Enabled = false }.Validate());

    /// <summary>An enabled recorder with a blank outbox directory warns about <c>OutboxPath</c>.</summary>
    [Fact]
    public void Enabled_requires_outbox_path()
        => Assert.Contains(
            new ContinuousHistorizationOptions { Enabled = true, OutboxPath = "" }.Validate(),
            m => m.Contains("OutboxPath"));

    /// <summary>Periodic commit mode with a non-positive interval warns about <c>CommitIntervalMs</c>.</summary>
    [Fact]
    public void Periodic_requires_positive_interval()
        => Assert.Contains(
            new ContinuousHistorizationOptions
            {
                Enabled = true,
                OutboxPath = "x",
                CommitMode = "Periodic",
                CommitIntervalMs = 0,
            }.Validate(),
            m => m.Contains("CommitIntervalMs"));

    /// <summary>A fully-configured enabled recorder produces no warnings.</summary>
    [Fact]
    public void Valid_config_is_clean()
        => Assert.Empty(
            new ContinuousHistorizationOptions
            {
                Enabled = true,
                OutboxPath = "/var/lib/otopcua/historization",
                CommitMode = "PerEntry",
            }.Validate());
}
