using ZB.MOM.WW.Configuration;

namespace ZB.MOM.WW.ScadaBridge.NotificationService;

/// <summary>
/// Validates <see cref="NotificationOptions"/> at startup. The values are the SMTP fallback used
/// by the central Email delivery adapter when the deployed <c>SmtpConfiguration</c> leaves the
/// corresponding field unset: <see cref="NotificationOptions.ConnectionTimeoutSeconds"/> becomes an
/// SMTP connect timeout and <see cref="NotificationOptions.MaxConcurrentConnections"/> caps the
/// connection pool — a non-positive value there is not a usable fallback. Registered with
/// <c>ValidateOnStart()</c> so a bad <c>ScadaBridge:Notification</c> section fails fast at boot with
/// a clear, key-naming message.
/// </summary>
public sealed class NotificationOptionsValidator : OptionsValidatorBase<NotificationOptions>
{
    /// <inheritdoc />
    protected override void Validate(ValidationBuilder builder, NotificationOptions options)
    {
        builder.RequireThat(options.ConnectionTimeoutSeconds > 0,
            $"ScadaBridge:Notification:ConnectionTimeoutSeconds must be greater than zero " +
            $"(was {options.ConnectionTimeoutSeconds}); it is the SMTP connect-timeout fallback.");

        builder.RequireThat(options.MaxConcurrentConnections > 0,
            $"ScadaBridge:Notification:MaxConcurrentConnections must be greater than zero " +
            $"(was {options.MaxConcurrentConnections}); it caps the SMTP connection pool.");
    }
}
