using ZB.MOM.WW.OtOpcUa.Commons.Types;
namespace ZB.MOM.WW.OtOpcUa.Commons.Interfaces;
///
/// Live view of the local node's identity and the cluster's role topology. Implemented by
/// ClusterRoleInfo in OtOpcUa.Cluster; consumed by everything that needs to
/// distinguish admin-role vs driver-role members or react to role-leader changes (e.g. OPC UA
/// ServiceLevel computation).
///
public interface IClusterRoleInfo
{
/// Gets the local cluster node identifier.
NodeId LocalNode { get; }
/// Gets the set of roles assigned to the local node.
IReadOnlySet LocalRoles { get; }
/// Checks if the local node has the specified role.
/// Role name to check.
/// True if the local node has the role; otherwise, false.
bool HasRole(string role);
/// Gets all nodes assigned to the specified role.
/// Role name to query.
/// List of node identifiers with the role.
IReadOnlyList MembersWithRole(string role);
/// Gets the leader node for the specified role, or null if no leader is elected.
/// Role name to query.
/// The leader node identifier, or null if no leader exists.
NodeId? RoleLeader(string role);
/// Occurs when the leader of a role changes.
event EventHandler? RoleLeaderChanged;
}