using System.Runtime.CompilerServices;
using ClawdDotNet.Core.Security;

namespace ClawdDotNet.Core.Tests.Infrastructure;

/// <summary>
/// Hält den Schlüssel von <see cref="SecretKeyStore"/> aus den Tests heraus.
///
/// Zwei Dinge müssen zusammenkommen:
///
/// 1. <see cref="Init"/> verlegt den Schlüssel <b>einmal beim Laden</b> der
///    Testassembly in ein Wegwerfverzeichnis. Ohne das würden die Tests den echten
///    Benutzerschlüssel anlegen oder lesen — auf dem Entwicklungsrechner wie auf dem
///    Bauserver.
///
/// 2. Wer den Schlüssel <em>während</em> eines Tests wechselt (etwa um zu prüfen, dass
///    ein fremder Schlüssel nicht liest), muss in dieser Sammlung laufen. Der Speicher
///    ist statisch; ohne abgeschaltete Parallelität zöge ein solcher Wechsel einer
///    gleichzeitig laufenden Klasse den Schlüssel unter den Füßen weg. Genau das ist
///    zwischen den Geheimnis- und den Sicherungstests passiert.
/// </summary>
[CollectionDefinition(Name, DisableParallelization = true)]
public sealed class SecretKeyCollection
{
    public const string Name = "SecretKey";

    [ModuleInitializer]
    internal static void Init()
    {
        SecretKeyStore.UseDirectory(Path.Combine(
            Path.GetTempPath(), "clawd-tests", "keys", Guid.NewGuid().ToString("N")));
    }
}
