using Kompas.Mcp.Core;
using Kompas.Mcp.Core.Threading;

namespace Kompas.Mcp.Tests.Integration;

/// <summary>
/// Общая фикстура интеграционных тестов: один STA-диспетчер и одно подключение к КОМПАС
/// на весь набор тестов коллекции (КОМПАС присоединяется/запускается единожды).
/// </summary>
public sealed class KompasFixture : IDisposable
{
    public KompasDispatcher Dispatcher { get; }
    public KompasSession Session { get; }
    public KompasConnectionInfo Info { get; }

    public KompasFixture()
    {
        Dispatcher = new KompasDispatcher();
        Session = new KompasSession(Dispatcher);
        Info = Session.ConnectAsync(visible: true).GetAwaiter().GetResult();
    }

    public void Dispose()
    {
        Session.Dispose();
        Dispatcher.Dispose();
    }
}

/// <summary>Коллекция, позволяющая делить одно подключение между классами интеграционных тестов.</summary>
[CollectionDefinition(Name)]
public sealed class KompasCollection : ICollectionFixture<KompasFixture>
{
    public const string Name = "kompas";
}
