using Opc.Ua;

namespace ZB.MOM.WW.OtOpcUa.Client.Shared.Adapters;

/// <summary>
///     Creates OPC UA sessions from a configured endpoint.
/// </summary>
internal interface ISessionFactory
{
    /// <summary>
    ///     Creates a session to the given endpoint.
    /// </summary>
    /// <param name="config">The application configuration.</param>
    /// <param name="endpoint">The configured endpoint.</param>
    /// <param name="sessionName">The session name.</param>
    /// <param name="sessionTimeoutMs">Session timeout in milliseconds.</param>
    /// <param name="identity">The user identity.</param>
    /// <param name="ct">Cancellation token.</param>
    /// <returns>A session adapter wrapping the created session.</returns>
    Task<ISessionAdapter> CreateSessionAsync(
        ApplicationConfiguration config,
        EndpointDescription endpoint,
        string sessionName,
        uint sessionTimeoutMs,
        UserIdentity identity,
        CancellationToken ct = default);
}