using System;
using ArchestrA.MxAccess;

namespace ZB.MOM.WW.MxGateway.Worker.MxAccess;

/// <summary>
/// Constants and metadata for MXAccess COM interop.
/// </summary>
public static class MxAccessInteropInfo
{
    /// <summary>
    /// Versioned ProgID for the MXAccess COM server.
    /// </summary>
    public const string ProgId = "LMXProxy.LMXProxyServer.1";

    /// <summary>
    /// Version-independent ProgID for the MXAccess COM server.
    /// </summary>
    public const string VersionIndependentProgId = "LMXProxy.LMXProxyServer";

    /// <summary>
    /// Class ID (CLSID) of the MXAccess COM server.
    /// </summary>
    public const string Clsid = "{C30B52F5-2CB5-4760-AF0A-3A344A7EB5DC}";

    /// <summary>
    /// Path to the ArchestrA.MxAccess.dll interop assembly.
    /// </summary>
    public const string InteropAssemblyPath =
        @"C:\Program Files (x86)\ArchestrA\Framework\Bin\ArchestrA.MXAccess.dll";

    /// <summary>
    /// Path to the installed MXAccess COM server DLL.
    /// </summary>
    public const string RegisteredServerPath =
        @"C:\Program Files (x86)\ArchestrA\Framework\Bin\LmxProxy.dll";

    /// <summary>
    /// Full qualified name of the COM class.
    /// </summary>
    public const string ComClassName = "ArchestrA.MxAccess.LMXProxyServerClass";

    /// <summary>
    /// Name of the MXAccess interop assembly.
    /// </summary>
    public static string InteropAssemblyName =>
        typeof(LMXProxyServerClass).Assembly.GetName().Name ?? string.Empty;

    /// <summary>
    /// Version of the MXAccess interop assembly.
    /// </summary>
    public static Version InteropAssemblyVersion =>
        typeof(LMXProxyServerClass).Assembly.GetName().Version ?? new Version(0, 0);
}
