using ZB.MOM.WW.OtOpcUa.Core.Abstractions;

namespace ZB.MOM.WW.OtOpcUa.Driver.Galaxy.Runtime;

/// <summary>
///     Decoded MXAccess alarm transition surfaced by <see cref="EventPump"/>.
///     The driver wraps this into <see cref="AlarmEventArgs"/> on the
///     <see cref="IAlarmSource.OnAlarmEvent"/> path; the richer fields
///     (operator user/comment, original raise time, category) become available
///     on the OPC UA Part 9 condition once <c>AlarmEventArgs</c> is extended in
///     the client-surface refresh PR (E.7).
/// </summary>
internal sealed record GalaxyAlarmTransition(
    string AlarmFullReference,
    string SourceObjectReference,
    string AlarmTypeName,
    GalaxyAlarmTransitionKind TransitionKind,
    AlarmSeverity SeverityBucket,
    int OpcUaSeverity,
    int RawMxAccessSeverity,
    DateTime? OriginalRaiseTimestampUtc,
    DateTime TransitionTimestampUtc,
    string OperatorUser,
    string OperatorComment,
    string Category,
    string Description);

/// <summary>Kind of alarm state change observed by <see cref="EventPump"/>.</summary>
internal enum GalaxyAlarmTransitionKind
{
    Unspecified = 0,
    Raise = 1,
    Acknowledge = 2,
    Clear = 3,
    Retrigger = 4,
}
