using ZB.MOM.WW.Secrets.Abstractions;

namespace ZB.MOM.WW.OtOpcUa.Driver.Galaxy;

/// <summary>
///     A null-object <see cref="ISecretResolver"/> that resolves every name to <c>null</c>
///     (absent). Used as the default for the internal test ctor and the parse-only
///     <c>CreateInstance</c> path so callers that never exercise a <c>secret:</c> API-key
///     ref need not thread a real resolver. A production <c>GalaxyDriver</c> always receives
///     the DI-registered resolver via the factory; a <c>secret:</c> ref resolved against this
///     null object throws fail-closed (the secret is reported absent), which is the correct
///     behaviour for a mis-wired deployment.
/// </summary>
internal sealed class NullSecretResolver : ISecretResolver
{
    /// <summary>The shared singleton instance.</summary>
    public static readonly NullSecretResolver Instance = new();

    private NullSecretResolver()
    {
    }

    /// <inheritdoc />
    public Task<string?> GetAsync(SecretName name, CancellationToken ct) =>
        Task.FromResult<string?>(null);
}
