using ZB.MOM.WW.Audit;
namespace ZB.MOM.WW.OtOpcUa.ControlPlane.Audit;
///
/// Maps OtOpcUa's audit Action vocabulary onto the canonical
/// . The vocabulary is the set of values documented on
/// ConfigAuditLog.EventType: config verbs are ,
/// the two authorization-rejection events are . OtOpcUa
/// emits no events today.
///
///
/// Pure function — no live emit sites construct an in production
/// (the structured audit path is dormant; all live audit flows through the bespoke stored
/// procedure path). This helper exists so that when the structured path is wired up, the
/// required Outcome field is derived consistently from the action verb. Tested, not
/// yet exercised in production.
///
public static class AuditOutcomeMapper
{
///
/// Derives the canonical for an OtOpcUa audit action verb.
/// Unknown verbs default to (config writes are the
/// overwhelming majority and the only non-success cases are the two explicit
/// authorization rejections enumerated below).
///
/// The audit action verb (e.g. DraftCreated, OpcUaAccessDenied).
/// The mapped outcome.
public static AuditOutcome FromAction(string action) => action switch
{
"OpcUaAccessDenied" or "CrossClusterNamespaceAttempt" => AuditOutcome.Denied,
// All other known config-write verbs (DraftCreated, DraftEdited, Published, RolledBack,
// NodeApplied, ClusterCreated, NodeAdded, CredentialAdded, CredentialDisabled,
// ExternalIdReleased) and any future verbs default to Success — config writes are the
// overwhelming majority and the only non-success cases are the two Denied entries above.
_ => AuditOutcome.Success,
};
}