namespace ZB.MOM.WW.OtOpcUa.OpcUaServer.Tests;

/// <summary>
///     Shared xUnit <c>Skip</c> reason constants for OpcUaServer tests whose intent is retained but
///     whose subject is not materialized in the v3 Batch-1 DARK address space. The composer
///     (<see cref="AddressSpaceComposer.Compose"/>) and the artifact both emit an EMPTY equipment-tag
///     variable plan set this batch — raw + UNS variable nodes are lit up in Batch 4's dual-namespace
///     UNS↔Raw fan-out. Until then any assertion whose subject is an equipment-tag variable node (its
///     FullName, its <c>{{equip}}</c>-token-derived base, its device-host binding) has nothing to
///     compare, so it is Skipped-with-reason rather than deleted. Mirrors
///     <c>Runtime.Tests.Drivers.DarkAddressSpaceReasons</c>.
/// </summary>
internal static class DarkAddressSpaceReasons
{
    /// <summary>
    ///     Equipment-tag variable materialization + its per-field intent (FullName / array / historize /
    ///     native-alarm / <c>{{equip}}</c>-token base derived from child-tag FullNames) is dark until Batch 4.
    /// </summary>
    public const string EquipmentTagsDarkBatch4 =
        "v3 dark address space: equipment-tag variable plans (FullName / array / historize / alarm / " +
        "{{equip}}-token base derived from child-tag FullNames) do not materialize until Batch 4 " +
        "(dual-namespace UNS↔Raw fan-out). The composer emits an empty equipment-tag plan set this batch, " +
        "so there is no per-equipment tag base to substitute and no equipment-tag variable node to assert. " +
        "Migrate + re-enable when Batch 4 lights the raw/UNS variable nodes.";

    /// <summary>Equipment↔device host binding is architecturally retired in v3.</summary>
    public const string EquipmentDeviceBindingRetired =
        "v3: equipment no longer binds a driver/device — Equipment lost DriverInstanceId/DeviceId and " +
        "Compose no longer takes a devices list, so EquipmentNode's DriverInstanceId/DeviceId/DeviceHost " +
        "projection is always null. Equipment references raw tags via UnsTagReference. The device-endpoint " +
        "merge this suite characterized now lives in Runtime.Tests DeploymentArtifactRawPathTests; the " +
        "host-extraction unit is Commons.Tests DeviceConfigIntentTests.";
}
